2017-08-11 9 views
-1

私は自分の仕事に問題があります。私は私の仕事から返された変数をreciveしようとすると、それを取得するために.Resultプロパティを使用することはできません。ここに私のコードは次のとおりです。なぜタスク<>。Resultプロパティを使用できないのですか?

var nextElement = dir.GetValue(i++).ToString(); 
Task buffering = Task<byte[]>.Run(() => imageHashing(nextElement)); 
bitmapBuffer = buffering.Result; 

とimageHasing機能は、次のように宣言されています:public bool[] imageHashing(string path)

私はエラーsaingを取得:

重大度コード説明プロジェクトファイルの行の抑制状態 エラーCS1061「タスク'には' Result 'の定義は含まれておらず、 拡張メソッド' Result 'は' Task 'タイプの最初の引数を受け入れます。 が見つかりました(usingディレクティブまたはアセンブリがありません) を参照してください)

例はありますが、なぜ私は理解できません。

+6

まあ、良いニュースです。ここでの仕事の使用は全く無意味です。現在のスレッドをブロックしているので、imageHashingを直接呼び出してTask.Runをスキップできます。 – Will

+3

「タスク」と宣言する必要があります。説明については、[この質問](https://stackoverflow.com/questions/11333297/threading-tasks-task-does-not-contain-a-definition-for-result)を参照してください。 –

+0

代わりにvarを使用する –

答えて

3

としてバッファリング変数を宣言する必要があります。しかし、このコードは

var nextElement = dir.GetValue(i++).ToString(); 
var buffering = Task.Run(() => imageHashing(nextElement)); 
bitmapBuffer = buffering.Result; 

また問題がある。特に、現在のスレッドが完了するまでブロックしようとしているのであれば、バックグラウンドスレッドに取り組むのは意味がありません。あなたにもちょうど直接メソッドを呼び出すことができます:

var nextElement = dir.GetValue(i++).ToString(); 
bitmapBuffer = imageHashing(nextElement); 

それとも、あなたはUIスレッド上にあり、その後、代わりにResultawaitを使用し、UIをブロックしたくない場合:

var nextElement = dir.GetValue(i++).ToString(); 
bitmapBuffer = await Task.Run(() => imageHashing(nextElement)); 
-3

バッファ変数にはTask<bool[]>を使用する必要があります。タイプを指定しないと、操作で結果が返されないことを意味します。

-2

あなたは他の人が指摘したように、コンパイラエラーがあなたの変数宣言(TaskResult性質を持っていない)であるTask<byte[]> buffering = Task<byte[]>.Run(() => imageHashing(nextElement));

関連する問題