DataGridView多线程更新数据的问题的解决办法

我通过INotifyPropertyChanged接口让DataGridView自动更新显示内容,但在多线程更新的时候,却发生了妙名其妙的问题,DataGridView居然抛出了这样一个异常:BindingSource 不能是自己的数据源。请不要将 DataSource 和 DataMember 属性设置为循环引用 BindingSource 的值。

真的是很莫名其妙,试了几次,不管有1条线程还是10条线程,只要不是在主线程上更新属性的值,就会随机地引发这个异常。注意,是随机引发的,也就是说并不是每一次更新都会有问题,而且引发异常的概率很低。 

本相用ILSpy去看个究竟,但实在懒得动手,就去问了问谷歌,倒是得到了一个解决办法,但原因还没找到。算了,能用就可以了。

其实很简单,大家一定都知道,其实我也知道,就是用Control.InvokeRequired去检查是否跨线程,然后用Invoke或BeginInvoke去更新控件,但因为要更新的属性比较多,本来想偷个懒,结果还是要我用这样的办法来解决。

问题是解决了,但原因还没有找到,不知道DataGridView凭什么认为是不是自己的数据源,这个问题到底是怎么产生的,我脑子里有一串问号,等哪天实在闲得慌的时候再去研究吧。 

转载于:https://www.cnblogs.com/effun/archive/2012/09/18/2691151.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值