【发布时间】:2015-12-13 17:02:59
【问题描述】:
在我的 WPF、.Net 4.5 应用程序中,我有一些长时间运行的任务发生在用户交互之后。
例如,如果用户单击按钮,在单独的线程上运行按钮操作的最佳方式是什么,以便用户可以在处理完成时继续与应用程序交互?
【问题讨论】:
-
按钮单击将始终在 UI 线程中运行。寻找一些多线程教程,例如 MSDN 中的this one。
标签: c# .net wpf multithreading
在我的 WPF、.Net 4.5 应用程序中,我有一些长时间运行的任务发生在用户交互之后。
例如,如果用户单击按钮,在单独的线程上运行按钮操作的最佳方式是什么,以便用户可以在处理完成时继续与应用程序交互?
【问题讨论】:
标签: c# .net wpf multithreading
对于长时间运行的任务,您可以使用 async/await。它旨在取代后台工作人员构造,但这完全取决于个人喜好。
这是一个例子:
private int DoThis()
{
for (int i = 0; i != 10000000; ++i) { }
return 42;
}
public async void ButtonClick(object sender, EventArgs e)
{
await Task.Run(() => DoThis());
}
这样的事情不会在任务完成时锁定 UI。
【讨论】:
使用BackgroundWorker 类。您需要将代码移动到工作人员并从按钮调用它的运行功能。 Here is a nice answer on StackOverflow on how to use it.
【讨论】:
一种方法是使用 TPL(任务并行库)。这是一篇关于代码项目的文章,关于Using TPL in WPF。
【讨论】: