介绍:
       可编辑的grid控件,它既作为发送者,又做为接收者。grid修改数据操作,获取改后datatable,然后由server端调用client端方法(定向广播)传递datatable,在将datatable给grid.DataSource时报错。从网上早解决方法:
       1、Control.CheckForIllegalCrossThreadCalls = false;试过不能解决。
       2、Invoke()方式没能研究明白。

解决方案 »

  1.   

    我这个demo是这样的:
    1、 UI线程——调用——〉服务线程class; 
    2、服务线程class——通过委托回调——〉UI线程的方法,且在此方法中写UI的控件属性;
      

  2.   

    Control.CheckForIllegalCrossThreadCalls = false; 这个应该可以的吧,我用时就可以的,不安全而已.
      

  3.   

    还是很感谢11楼来顶贴,csdn再限制我自己顶贴,我就换我自己的号顶。
    呵呵,苦中作乐
      

  4.   

    申明一个代理:
    delegate void unname();
    在线程里面:
    当要调用控件的时候
    string txt="";
    unname un=delegate()
    {
       txt=TextBox1.Text;
    }
    TextBox1.Invoke(un);//第2次调用的时候 如果还是在一个生命周期里面:
    un=delegate()
    {
       txt=TextBox2.Text;
    }
    TextBox2.Invoke(un);明白了么?
      

  5.   

    回复:19楼
         经测试编译都不能通过。
     delegate void unname();        private void esCustom_Refrash(DataTable dt)
            {
                try
                {
                    unname kk = Delegate()//这里要求输入分号 
                    {
                        this.grdctrlCustom.DataSource = dt;
                    }                this.grdctrlCustom.Invoke(kk);
                }
                catch (Exception expt)
                {
                    MessageBox.Show(expt.Message);
                }
            }
        
      

  6.   

    场景: 
        假设UIA为某功能模块winform界面,其中UIA_1为正在运行的一个客户端,UIA_2为正在运行的另一个客户端。那么这时UIA_1通过代理访问远程类remoteClass的方法修改DB.table1,在修改DB.table1后通过委托事件callback设置UIA中的某控件的属性 
    ,即所有当前运行的UIA的客户端均接收到callback设置。问题是UIA正运行的客户端会报错“线程间操作无效: 从不是创建控件“grdctrlCustom”的线程访问它。”,这种问题如何解决呢? 
    不知道我说明白没?请老牛、大牛、小牛、大虾们指正。
      

  7.   

    回复19楼:
            不好意思,是我对匿名委托不懂,我按照你的方式处理后,还是没能解决这个问题。现在是程序运行到
    TextBox1.Invoke(un)这句话是就死掉了。