让你的WPF程序使用多线程——BackgroundWorker

时间:2021-07-18 03:48:54

在wpf中可以使用许多方法执行异步操作。利用.NET的芳芳就是手动创建一个新的System.Threading.Thread对象,提供一步代码,并使用THread.Start()方法加载代码。这种方法很有用,因为Thread对象没有隐瞒任何内容。如果你愿意,可以创建几十个线程,设置他们的优先级,控制他们的状态(如暂停、恢复以及中止它们)等等。然而,这种方法也存在一些危险。如果访问了共享数据,需要使用锁定机制来避免潜在的错误。如果频繁创建线程或者大量创建线程,会产生额外的、不必要的开销。

编写良好的多线程代码的技术——以及将要使用的.NET类——不是特定于WPF的。如果曾经在windows窗体应用程序中编写过多线程代码,就可以在WPF领域中使用相同的技术。但是本篇分析最简单最安全的方法:System.ComponentModel.BackgroundWorker组件。

BackgroundWorker组件是.NET2.0版本提供的,用语简化Windows窗体应用程序中与线程相关的问题。然而,在wpf中同样适用BackgroundWorker组件。BackgroundWorker组件为在单独的线程中运行好事的任务提供了一种非常简单的方法。它在后台使用调度程序,并且使用一个给予时间的模型对封送问题进行抽象。

正如将要介绍的,BackgroundWorker组件还支持另外两个功能:进度(progess)时间和取消消息。对于这两种情况都隐藏了线程细节,使代码的编写更加容易。

注意:

如果从开始都结束只有一个异步任务在后台运行,那么使用BackgroundWorker组件是非常完美的。如果还需要考虑其他事情——例如,在整个应用程序声明周期中运行的异步任务,或者当执行其工作时与应用程序进行通信的异步任务,就需要使用.NET的线程支持来设计自定义的解决方案了。

一简单的异步操作