我有一个单线程程序,它执行复杂、耗时的计算并报告这些计算的进度。
private void BtnExecute_Click()
{
ComplexCalculation(Object1);
ComplexCalculation(Object2);
ComplexCalculation(Object3);
}
ComplexCalculation 方法如下所示:
private void ComplexCalculation(Object MyObject)
{
(...do some time consuming operation on MyObject...);
WriteToTextboxGUI("50% Complete" + MyObject.Name);
(...do another time consuming operation on MyObject...);
WriteToTextboxGUI("100% Complete" + MyObject.Name);
}
在上面的代码中,该WriteToTextboxGUI(string)
方法使用进度更新 GUI 上的文本框。
我希望采用多线程方法,以便 GUI 在执行复杂计算时保持响应。我已经阅读了很多关于BackgroundWorker
和Threads
一般的内容,然后当Task
TPL 与 .Net 4.0 一起出现时,这是如何简化/改进的,现在如何Async
以及Await
已经与 .Net 4.5 一起出现,并且想知道这些是否最近的技术可以让我重新编写我的应用程序(以相对简单的代码),以便它可以:
- 同时使用多个线程来执行复杂的计算
- 像以前一样向我的 GUI 报告进度
- 始终保持响应式 GUI
谁能指出一个满足这三个标准的简单解决方案的方向?
PS 这个应用程序不会在服务器上运行,它将在桌面上的 WPF 中运行。