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();
          }
    }

  • 相关阅读:
    当算法提升到哲学层面—小议验证码识别
    2014总结
    [脚本无敌2]python获取cocos 2dx项目文件列表
    单幅图构建三维图
    [思考]画个圈圈诅咒你
    Mybatis2
    Mybatis1
    淘淘商城虚拟机启动命令
    Zookeeper集群搭建zookeeper01启动不成功解决方案
    Mybatis的xml文件的相关配置
  • 原文地址:https://www.cnblogs.com/junior/p/2405832.html
Copyright © 2011-2022 走看看