数据绑定,在多线程中出现问题

srhouyu 2013-01-16 12:05:43
我的程序是一个主窗口负责界面操作,一个主要的工作类TaskServer(它是单件模式的)

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

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

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

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

数据绑定不是原本就是可以安全地跨线程的吗?为什么这里却不给我用?
...全文
245 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
srhouyu 2013-01-17
  • 打赏
  • 举报
回复
引用 11 楼 stonespace 的回复:
dataGrid中不要直接绑定TaskServer.DataList,安全的话,界面中维护一个自己的DataList,界面中用一个方法把TaskServer.DataList复制到界面自己的DataList,然后再绑定,这个方法用委托调用就可以用于多线程了, 引用 3 楼 srhouyu 的回复:引用 1 楼 zdbb 的回复:可以用委托添加. 普通的往界面上的赋……
试了一下,这是个解决方法,不过还是不够完美。不断地把界面上的list清空然后重新复制入原list的内容,这样一来界面的datagrid会不断重新清空后重新载入。用户在里面滚定查看内容都成为很困难的一件事情。不知道还有啥改进方法没。
stonespace 2013-01-17
  • 打赏
  • 举报
回复
dataGrid中不要直接绑定TaskServer.DataList,安全的话,界面中维护一个自己的DataList,界面中用一个方法把TaskServer.DataList复制到界面自己的DataList,然后再绑定,这个方法用委托调用就可以用于多线程了,
引用 3 楼 srhouyu 的回复:
引用 1 楼 zdbb 的回复:可以用委托添加. 普通的往界面上的赋值操作,我可以加委托,但是这里是数据绑定,它中间在何时何地赋值的,我看不到,在哪个部位添加委托呢?
srhouyu 2013-01-16
  • 打赏
  • 举报
回复
引用 9 楼 silwol 的回复:
然后,在TaskServer中也开了若干线程,其中一个是往DataList里面添加东西的。 -->你这个线程里面添加东西的操作应该调用主窗口的Invoke吧
如果还要把主窗口的Invoke传到这里来,那设计不就乱了吗
XBodhi. 2013-01-16
  • 打赏
  • 举报
回复
跨线程了。 WINFORM 用委托。 WPF用 Dispictor
只在此山中 2013-01-16
  • 打赏
  • 举报
回复
可以用委托添加.
silwol 2013-01-16
  • 打赏
  • 举报
回复
然后,在TaskServer中也开了若干线程,其中一个是往DataList里面添加东西的。 -->你这个线程里面添加东西的操作应该调用主窗口的Invoke吧
srhouyu 2013-01-16
  • 打赏
  • 举报
回复
引用 7 楼 lye2000000_super 的回复:
用lock,添加数据的时候加锁。 private object lockobj = new object(); lock(lockobj){ //绑定数据。 }
lock了也是同样的结果。我私下里在添加数据的时候lock,C#根本不承认。
  • 打赏
  • 举报
回复
用lock,添加数据的时候加锁。 private object lockobj = new object(); lock(lockobj){ //绑定数据。 }
ZHAIXIONUO1234 2013-01-16
  • 打赏
  • 举报
回复
关注一下!!! 我也正想这个问题
srhouyu 2013-01-16
  • 打赏
  • 举报
回复
引用 4 楼 bdmh 的回复:
http://www.2cto.com/kf/201206/136587.html
求问对于数据绑定的情况该怎么办。。在哪个部位添加委托呢?
bdmh 2013-01-16
  • 打赏
  • 举报
回复
srhouyu 2013-01-16
  • 打赏
  • 举报
回复
引用 1 楼 zdbb 的回复:
可以用委托添加.
普通的往界面上的赋值操作,我可以加委托,但是这里是数据绑定,它中间在何时何地赋值的,我看不到,在哪个部位添加委托呢?

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧