zoukankan      html  css  js  c++  java
  • DataGridView多线程更新数据的问题的解决办法

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

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

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

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

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

  • 相关阅读:
    【tyvj1952】easy
    【noip2005】篝火晚会
    BZOJ4818: [Sdoi2017]序列计数
    BZOJ2436: [Noi2011]Noi嘉年华
    BZOJ4826: [Hnoi2017]影魔
    BZOJ4540: [Hnoi2016]序列
    BZOJ4827: [Hnoi2017]礼物
    BZOJ3527: [Zjoi2014]力
    BZOJ4407: 于神之怒加强版
    BZOJ1854: [Scoi2010]游戏
  • 原文地址:https://www.cnblogs.com/effun/p/2691151.html
Copyright © 2011-2022 走看看