介绍:
可编辑的grid控件,它既作为发送者,又做为接收者。grid修改数据操作,获取改后datatable,然后由server端调用client端方法(定向广播)传递datatable,在将datatable给grid.DataSource时报错。从网上早解决方法:
1、Control.CheckForIllegalCrossThreadCalls = false;试过不能解决。
2、Invoke()方式没能研究明白。
可编辑的grid控件,它既作为发送者,又做为接收者。grid修改数据操作,获取改后datatable,然后由server端调用client端方法(定向广播)传递datatable,在将datatable给grid.DataSource时报错。从网上早解决方法:
1、Control.CheckForIllegalCrossThreadCalls = false;试过不能解决。
2、Invoke()方式没能研究明白。
1、 UI线程——调用——〉服务线程class;
2、服务线程class——通过委托回调——〉UI线程的方法,且在此方法中写UI的控件属性;
呵呵,苦中作乐
delegate void unname();
在线程里面:
当要调用控件的时候
string txt="";
unname un=delegate()
{
txt=TextBox1.Text;
}
TextBox1.Invoke(un);//第2次调用的时候 如果还是在一个生命周期里面:
un=delegate()
{
txt=TextBox2.Text;
}
TextBox2.Invoke(un);明白了么?
经测试编译都不能通过。
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);
}
}
假设UIA为某功能模块winform界面,其中UIA_1为正在运行的一个客户端,UIA_2为正在运行的另一个客户端。那么这时UIA_1通过代理访问远程类remoteClass的方法修改DB.table1,在修改DB.table1后通过委托事件callback设置UIA中的某控件的属性
,即所有当前运行的UIA的客户端均接收到callback设置。问题是UIA正运行的客户端会报错“线程间操作无效: 从不是创建控件“grdctrlCustom”的线程访问它。”,这种问题如何解决呢?
不知道我说明白没?请老牛、大牛、小牛、大虾们指正。
不好意思,是我对匿名委托不懂,我按照你的方式处理后,还是没能解决这个问题。现在是程序运行到
TextBox1.Invoke(un)这句话是就死掉了。