在C#中,在线程中(包括 BackgroundWorker 控件)访问主线程UI时会抛出异常:因为.net禁止了跨线程调用控件。下面用一个办法来进行跨线程的调用,且不阻塞控件。以给控件赋Text值为例,因为这个比较实用。
private delegate void Thread_SetControl_Text(Control c,string str);
private void ThreadSetControlText(Control c,string str)
{
if (c.InvokeRequired)//等待异步
{
Thread_SetControl_Text fc = new Thread_SetControl_Text(ThreadSetControlText);
this.Invoke(fc, new object[2] {c, str});
}
else
{
c.Text = str;
c.Refresh();
}
}
在线程中如下调用(假设有 textBox1) :
ThreadSetControlText(this.textBox1,"ABC");