1. ホーム
  2. c#

[解決済み】UIスレッドでのタスク継続について

2022-04-06 11:53:40

質問

タスクの継続が、最初のタスクが作成されたスレッドで実行されるように指定する「標準的な」方法はありますか?

現在、私は以下のコードを持っています - これは動作していますが、ディスパッチャを追跡し、2番目のアクションを作成することは、不必要なオーバーヘッドと思われます。

dispatcher = Dispatcher.CurrentDispatcher;
Task task = Task.Factory.StartNew(() =>
{
    DoLongRunningWork();
});

Task UITask= task.ContinueWith(() =>
{
    dispatcher.Invoke(new Action(() =>
    {
        this.TextBlock1.Text = "Complete"; 
    }
});

解決方法は?

で継続を呼び出す。 TaskScheduler.FromCurrentSynchronizationContext() :

    Task UITask= task.ContinueWith(() =>
    {
     this.TextBlock1.Text = "Complete"; 
    }, TaskScheduler.FromCurrentSynchronizationContext());

これは、現在の実行コンテキストがUIスレッド上にある場合にのみ適しています。