木子屋 Dnawo's BLOG

使用 BackgroundWorker 进行多线程编程

👤 dnawo 📅 2009-05-04 👁 5301 👍 0 💬 0 🔄 本站原创
在WinForm开发过程中,如果没有采用多线程编程,经常会出现在执行某个操作时整个界面卡死,无法再做其他操作,而采用多线程编程能很好的解决这个问题,但随之而来的又有线程间控件的操作问题(.NET不允许在创建某控件之外其他线程中操作控件),下边我们用一个例子说明怎么使用BackgroundWorker解决这一系列的问题:

//using System.ComponentModel;
private void Form1_Load(object sender, EventArgs e)
{
    using (BackgroundWorker bgWorker = new BackgroundWorker())
    {
        int i = 0;

        //将会引起界面卡死的操作放在单独线程中执行
        bgWorker.DoWork += delegate(object sender1, DoWorkEventArgs e1)
        {
            foreach (string item in Directory.GetFiles(@"E:\www", "*.*", SearchOption.AllDirectories))
            {
                File.AppendAllText(@"E:\list.txt", item + "\r\n");
                i++;
            }
        };

        //在 RunWorkerCompleted 中操作线程间控件,这是允许的
        bgWorker.RunWorkerCompleted += delegate(object sender1, RunWorkerCompletedEventArgs e1)
        {
            textBox1.Text = string.Format("统计完成,总共{0}个文件.", i);
        };

        //开始执行
        bgWorker.RunWorkerAsync();
    }
}

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 Effective C# 原则4:用条件属性而不是#if预编译块 下一篇 → .NET控件名称缩写一览表