Sya*_*hya 13 c# wpf multithreading tap task-parallel-library
例
private void Start(object sender, RoutedEventArgs e)
{
int progress = 0;
for (;;)
{
System.Threading.Thread.Sleep(1);
progress++;
Logger.Info(progress);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想要Start(),建议的方法是什么(TAP或TPL或BackgroundWorker或Dispatcher或其他)
nos*_*tio 23
使用.NET 4.5(或.NET 4.0 + Microsoft.Bcl.Async),最好的方法是使用Task基于API的API async/await.它允许使用方便(伪)顺序代码工作流并具有结构化异常处理.
例:
private async void Start(object sender, RoutedEventArgs e)
{
try
{
await Task.Run(() =>
{
int progress = 0;
for (; ; )
{
System.Threading.Thread.Sleep(1);
progress++;
Logger.Info(progress);
}
});
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
更多阅读:
最好的方法是使用a BackgroundWorker.
我指出这一点的原因是它专门设计用于在后台处理工作,同时保持UI线程可用和响应.它还内置了Progress通知和支持Cancellation.
我建议看几个BackgroundWorker的例子.
现在,当你开始研究背景工作者时,有一点Cancellation你必须深入研究.设置后台工作程序的取消属性不会取消后台工作程序,这只会为您的运行方法引发一个标志,以便定期进行interogate并优雅地停止处理.
这是我前一段时间关于取消后台工作人员的帖子之一/sf/answers/1465875071/
最后.Asyncronous并不意味着多核甚至多线程.(WIKI)