从非启动线程访问控件会出现错误:线程间操作无效: 从不是创建控件“”的线程访问它。
目前常用的解决方法有如下两种:
方法一:
Control.CheckForIllegalCrossThreadCalls = false;
这种方法只是作为保留方法,一般不用。
方法二:
用委托,每个控件都有个InvokeRequired的属性,判断一下是不是true,是的话进行Invoke操作。
//建立委托
private delegate string ReturnStrDelegate();
private string GetNamel()
{
return txtName.Text.Trim();
}
//判断一下是不是该用Invoke,不是就直接返回
private string ReturnName(ReturnStrDelegate del)
{
if (txtName.InvokeRequired)
{
return (string)txtName.Invoke(del);
}
else
{
return del();
}
}
//调用
string _name = ReturnName(GetName);
===============================================
void Server_DataReponse(Message msg)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new DataReponse(Server_DataReponse), new object[] { msg });
}
else
{
this.txtInfo.AppendText("收到信息" + msg.ToString());
this.txtInfo.ScrollToCaret();
}
}