zoukankan      html  css  js  c++  java
  • C#多线程问题整合

    一、跨进程访问组件

    错误:线程间操作无效: 从不是创建控件“XXX”的线程访问它

    解决方法:

    1:把CheckForIllegalCrossThreadCalls设置为false 

    这个方法只是不去捕获对错误线程的调用,并没有从根源上解决问题,通常代码还会继续抛出组件未被实例化的错误。

    2:委托(推荐)

    直接上代码

    public delegate void MyInvoke();
    
    private void SetBtnStatus()
     {      
         if (IsHandleCreated)
         {
             MyInvoke mi = new MyInvoke(SetStatusMethod);
             BeginInvoke(mi);
         }
         else
            SetStatusMethod();
     }
    
    public void SetStatusMethod()
    {
         btnSave.Enable = true;
    }
    

     声明一个委托方法MyInvoke

      IsHandleCreated:获取一个值,该值指示控件是否有与它关联的句柄。如果组件没有被关联,则可以直接执行方法,创建或操作组件。有被关系则委托执行方法。

       备注:在C#窗体应用程序中,子窗体执行委托方法仍然会报错,实际应该以父级的身份执行委托,代码:父级窗体.Instance.Invoke();

  • 相关阅读:
    爬虫入门(五)
    爬虫入门(四)
    爬虫入门(三)
    爬虫入门(二)
    爬虫入门(一)
    openpyxl的简单使用
    ansible(三)
    ansible(二)
    ansible(一)
    CF Global Round 10-F
  • 原文地址:https://www.cnblogs.com/afei9527/p/4703979.html
Copyright © 2011-2022 走看看