var task = new Task(...); // run in the background, do something lengthy work
task.ContinueWith(..., TaskScheduler.FromCurrentSynchronizationContext());
task.Start();
2番目のタスクは、順番にGUIを更新しようとしたイベントが、そこに呼び出し、我々は恐ろしいクロススレッドの例外を取得します。
Thread.CurrentThread.ManagedThreadId
を2番目のタスクのメソッドからチェックすると、UIスレッド上で実行されているのはではなく、です。
タスクを生成するコードは、UIスレッドで実行されているです。
これが間違っているシナリオはありますか?
なぜTask.StartNewを実行する代わりに直接タスクを作成するのですか? –
@ PanagiotisKanavos、これを行う正当な理由がある可能性があります(http://blogs.msdn.com/b/pfxteam/archive/2010/06/13/10024153.aspxを参照)。しかし、これは問題に関連していません。 –
私はこの事態に遭遇したり、コンテキストをヌルにしたりすることはできません。タスクを作成するための呼び出しが最初にUIスレッドで行われていない限り、 –