使用 BackgroundWorker 进行多线程编程

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

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

        //将会引起界面卡死的操作放在单独线程中执行
        bgWorker.DoWork += delegate(object sender1, System.ComponentModel.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, System.ComponentModel.RunWorkerCompletedEventArgs e1)
        {
            textBox1.Text = string.Format("统计完成,总共{0}个文件.", i);
        };

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


文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: 568
发表评论
登录后再发表评论!