从非启动线程访问控件的两种方法

从非启动线程访问控件会出现错误:线程间操作无效: 从不是创建控件“”的线程访问它。
目前常用的解决方法有如下两种:

方法一:
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();
      }
}

原文地址:https://www.cnblogs.com/junior/p/2405832.html