zoukankan      html  css  js  c++  java
  • 从非启动线程访问控件的两种方法

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

    方法一:
    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
Copyright © 2011-2022 走看看