データベースから製品を取得するタスクと、ContinueWith
UI の変更を操作するアクションがあるため、タスクが新しいスレッドを作成し、UI の変更が UI スレッドではなく実行されたため、問題が発生しました。
私はこの修正を使用しようとしました:
var currentScheduler = TaskScheduler.Current;
Task.Factory.StartNew(() =>
{
// get products
}).ContinueWith((x) => handleProductsArrived(x.Result, x.Exception), currentScheduler);
しかし、まったく機能しませんでした。チェックすると、ContinueWith
currentScheduler のスレッドではなく、別のスレッドで実行されました。
私はこの方法を発見しました:
Task.Factory.StartNew(() =>
{
// get products
}).ContinueWith((x) => handleProductsArrived(x.Result, x.Exception), TaskScheduler.FromCurrentSynchronizationContext());
そしてそれは動作します。違いは何ですか?最初のコードが機能しなかったのはなぜですか? ありがとう!