日期:2014-05-17  浏览次数:20935 次

数据绑定,在多线程中出现问题
我的程序是一个主窗口负责界面操作,一个主要的工作类TaskServer(它是单件模式的)

主界面负责启停TaskServer的工作,并且用一个DataGridView控件显示TaskServer中存放的一个BindingList。

数据绑定,我是直接在主窗口的构造函数中写:dataGrid.DataSource = TaskServer.DataList;

然后,在TaskServer中也开了若干线程,其中一个是往DataList里面添加东西的。

我一旦添加东西,就捕获到异常:“线程间操作无效: 从不是创建控件“dataGrid”的线程访问它。”

数据绑定不是原本就是可以安全地跨线程的吗?为什么这里却不给我用?

------解决方案--------------------
dataGrid中不要直接绑定TaskServer.DataList,安全的话,界面中维护一个自己的DataList,界面中用一个方法把TaskServer.DataList复制到界面自己的DataList,然后再绑定,这个方法用委托调用就可以用于多线程了,

引用:
引用:可以用委托添加.
普通的往界面上的赋值操作,我可以加委托,但是这里是数据绑定,它中间在何时何地赋值的,我看不到,在哪个部位添加委托呢?