use*_*719 8 wpf task microsoft-metro
我正在尝试在后台执行操作,而不会冻结UI.
当然,我可以使用BackgroundWorker.
但是,我只想使用Task API.
我试过了:
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
await LongOperation();
}
// It freezes the UI
Run Code Online (Sandbox Code Playgroud)
和
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
var task = Task.Run(()=> LongOperation());
task.Wait();
}
// It freezes the UI
Run Code Online (Sandbox Code Playgroud)
我应该回到BackgroundWorker吗?或者是否只有使用任务的解决方案?
Ste*_*ary 16
你非常接近.
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
await Task.Run(() => LongOperation());
}
Run Code Online (Sandbox Code Playgroud)
async
不会在线程池线程上执行方法.
Task.Run
在线程池线程上执行操作并返回Task
表示该操作的操作.
如果你Task.Wait
在一个async
方法中使用,那你做错了.你应该await
在async
方法中的任务,永远不要阻止他们.
归档时间: |
|
查看次数: |
9354 次 |
最近记录: |