C#多线程编程(4):多线程与UI操作
2010-09-30 22:44:22 来源:WEB开发网程序的界面如下:
我们的本意是点击“启动”按钮来启动模拟一个操作,在进度条中显示操作的总体进度。不过如果我们真的点击“启动”按钮会很失望,因为它会抛出一个System.InvalidOperationException异常,异常描述就是“线程间操作无效: 从不是创建控件‘progressBar’的线程访问它。”
CheckForIllegalCrossThreadCalls属性
之所以会出现这样的情况是因为在.NET中做了限制,不允许在调试环境下使用线程访问并非它自己创建的UI控件,这么做可能是怕在多线程环境下对界面控件进行操作会出现不可预知的情况,如果开发者可以确认自己的代码操作界面不会出现问题,可以用比较简单的方法解决,那就是设置 CheckForIllegalCrossThreadCalls这个静态属性,它默认是true,如果将其设为false的话,以后在多线程环境下操作界面也不会抛出异常了,我们上面的代码可以修改为:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace ThreadPoolDemo
{
public partial class ThreadForm : Form
{
public ThreadForm()
{
InitializeComponent();
}
private void btnThread_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(Run));
thread.Start();
}
private void Run()
{
while (progressBar.Value < progressBar.Maximum)
{
progressBar.PerformStep();
}
}
}
}
更多精彩
赞助商链接