线程间操作无效: 从不是创建控件“strAddress”的线程访问它,这样的问题如何解决?

解决方案 »

  1.   

    两种方法
    1.可以在主线程中添加一个语句CheckForillegalCrossThreadCalls = false;
    2.用委托,如下在主线程中调用test()方法就行了。private delegate void SetTextCallbakc();
    //主线程中调用方法
    public void test()
            {
                SetTextCallbakc stcb = new SetTextCallbakc(callbakc);
                Invoke(stcb);  
            }//具体要调用的方面
    public void callbakc()
    {}
      

  2.   

    跨线程操作控件记得要Invoke.
    否则即使调试通过也不能保证运行时不出问题.
      

  3.   

    http://www.cnblogs.com/Kevin-moon/archive/2009/01/13/1374353.html
    看下这篇搜SynchronizationContext相关
      

  4.   

    Invoke的方法比较老了.C#1.0的方法
      

  5.   

    最简单的这样写:
    在窗体加载事件里:
    System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false;正规的方法是:用委托,把子线程对控件的访问委托给主线程。参考2楼。
      

  6.   

    判断是否是同一线程上的,如果是就直接调用,不是的话就用委托回溯到调用它的主线程上去
    private void OperateStrAddress()
    {
        if(strAddress.InvokeRequired)
        {
            strAddress.Invoke(new MethodInvoker(OperateStrAddress));
        }
        else
        {
            ...//Your code here
        }
    }