.Net2.0安全线程编程实践2011-08-20 博客园 深山老林前不久做了一个winform的项目,在项目中涉及了大量的线程操作(也会有异步调用),在处理这些 线程操作的时候不得不做大量的测试、优化,而且还容易出问题,而且还设计很多的界面控件的属性控 制,搞的我非常的头疼。用异步线程来做的话,不安全,还容易产生死锁,虽然.net提供了线程类,可 是当在线程中一旦涉及有Thread.Sleep()操作的时候,原来的线程就会被注入,进而导致界面不能够被 更新。为了解决这个问题,我查阅了相关的资料,且听风吟写的不错的一篇文章《c#中使用多线程访问 winform中控件的若干问题》对我起到了一些帮助,可是随之而来的问题就是,编码量特别的大,如果按 照且听风吟的文章提供的方法,我写这个程序写的非常的辛苦,虽然解决了Thread.Sleep()的问题,但 是却不能保证是线程安全的。为什么这么说,虽然.net提供了线程类,可是如果没有深厚的积累,丰富 的经验,是不能把复杂的线程处理好的。直到今天,我才发现原来.net2.0已经提供了backgroundWorker 组件,使用它就可以很容易的写出线程安全的软件来。有关它的介绍,大家可以参考《VS2005中BackgroundWorker组件的使用经验》以下是我做的一个demo,比较简单,代码如下:using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Threading; using System.Windows.Forms; using System.Xml;
namespace UseBackgroundWorker { public partial class Form1 : Form { private XmlDocument document = null; public Form1() { InitializeComponent(); }