跨线程访问界面控件时,访问下窗体的 InvokeRequired 属性,如果为false就可以直接访问,否则就是跨线程访问;此时,创建一个delegate,并通过Invoke() 来调用它.
private void setTimer(string str)
{if (this.frm.InvokeRequired) //控件是否跨线程?如果是,则执行括号里代码
{
myDelegate md = new myDelegate(this.setTimer); //实例化委托对象
this.Invoke(md, new object[] { str }); //重新调用setTimer函数
}
else //否则,即是本线程的控件,控件直接操作
this.timer2.Enabled = true;
}
定义一个委托
创建一个方法
{ 如果某一个操作需调用主线程的该方法
给他创建一个该方法的副本,
调用该方法的副本执行操作
如果并没有调用主线程操作
直接执行
【你需要的操作】
}
if (this.IsDisposed) return;
this.Invoke(new EventHandler(delegate(object s1, EventArgs e1)
{
txtReHID.BackColor = Color.Green;
txtReHID.Text = mcard.i_No.ToString();
}));