UIをフリーズすることなく、バックグラウンドでアクションを実行しようとしています。UIをフリーズしないで長いタスクを実行する
もちろん、これにはBackgroundWorkerを使用できます。
しかし、私はタスクAPIだけでやりたいと思います。
私が試した:
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
await LongOperation();
}
// It freezes the UI
と
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
var task = Task.Run(()=> LongOperation());
task.Wait();
}
// It freezes the UI
をだから私は戻ってのBackgroundWorkerに行くべき?または、タスクのみを使用するソリューションがありますか?
なぜ多くの人がBackgroundWorkerを好まないのですか?私はそれが好きで、構文を直接見つける。 – Paparazzi
'BackgroundWorker'は' Thread'よりはるかに優れていますが、最終的に 'Task'ベースのAPIが支配的になります。私は[関連するブログ記事](http://nitoprograms.blogspot.com/2010/08/various-implementations-of-asynchronous.html)を持っています。 'Task.Run'には次のような利点があります:(1)入れ子を許します。 (2)取り消しサポートは、統一された「CancellationToken」システムを使用する。 (3)例外は正しい呼び出しスタックでより自然に伝達されます。 (4)結果はより自然に取り出される。 (5)は、より少ないリソース(専用スレッドの代わりにスレッドプール)を使用します。 –