TaskScheduler.FromCurrentSynchronizationContextメソッドでTask実行後にUIを操作する
WPFのTPL(Task Parallel Library)ではTask.Factory.StartNewメソッドを使って簡単に別スレッドでタスクを実行させることができます。
しかし、終了時にUIスレッドのコントロールなどを操作してユーザーにタスクが終了したいことを通知したいことがよくあります。
こういった場合に使えるTaskScheduler.FromCurrentSynchronizationContextメソッドの使い方をご紹介します。
といっても使い方は簡単です。Task.ContinueWithメソッドの第2引数にこのメソッドの戻り値を渡すだけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 実行ボタンを無効にしておく execButton.Enabled = false; messageTextBox.Text = "実行中..."; Task.Factory.StartNew(() => { // なにか時間のかかる処理 Thread.Sleep(3000); }) .ContinueWith(o => { // 実行ボタンを有効に戻してメッセージを表示 execButton.Enabled = true; messageTextBox.Text = "完了しました。"; }, TaskScheduler.FromCurrentSynchronizationContext()); |
ContinueWithメソッドのActionの中でDispatcher.Invokeを呼んでもいいのですが、このほうが階層が浅くていいですね。
ただまぁ、書き方というかメソッド名が冗長な気はしますが。
最後までお読みいただきありがとうございました m(_ _)m
スポンサーリンク
スポンサーリンク