使用 BackgroundWorker 进行多线程编程

在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 | 引用: 0 | 查看次数: 4691
发表评论
登录后再发表评论!