我通过INotifyPropertyChanged接口让DataGridView自动更新显示内容,但在多线程更新的时候,却发生了妙名其妙的问题,DataGridView居然抛出了这样一个异常:BindingSource 不能是自己的数据源。请不要将 DataSource 和 DataMember 属性设置为循环引用 BindingSource 的值。
真的是很莫名其妙,试了几次,不管有1条线程还是10条线程,只要不是在主线程上更新属性的值,就会随机地引发这个异常。注意,是随机引发的,也就是说并不是每一次更新都会有问题,而且引发异常的概率很低。
本相用ILSpy去看个究竟,但实在懒得动手,就去问了问谷歌,倒是得到了一个解决办法,但原因还没找到。算了,能用就可以了。
其实很简单,大家一定都知道,其实我也知道,就是用Control.InvokeRequired去检查是否跨线程,然后用Invoke或BeginInvoke去更新控件,但因为要更新的属性比较多,本来想偷个懒,结果还是要我用这样的办法来解决。
问题是解决了,但原因还没有找到,不知道DataGridView凭什么认为是不是自己的数据源,这个问题到底是怎么产生的,我脑子里有一串问号,等哪天实在闲得慌的时候再去研究吧。