因为涉及到了两个线程,所以我也说不清楚到底是不是进入死循环了主线程主要就是更新datagridview,包括CellFormatting,包括每次刷新后显示最后一行而不是第一行这样的功能,副线程主要是获取数据,将数据写入dataset,然后调用beginInvoke来更新绑定数据,似乎这个绑定数据以更新,datagridview就自己启动CellFormatting事件了

解决方案 »

  1.   

    你这种问题我也没有解决,我的不是死循环,和你一样,不出现滚动条之前没问题,一旦出行数多了,产生滚动条,就会死,但内存和CPU都没有太大变化,也是两个线程,副线程负责更新数据。
      

  2.   

    to ycg_893,
    别人教了我一个办法,就是在更新datagridview的时候,不要再用bindingsource作为datagridview的datasource了,直接把dataset的表作为datasource,相当于重新画一次datagridview,这样就不会闪了,而且滚动条也不会报错了
      

  3.   

    我是这样做的
    用一个public DataTable dt
    在backgroundWorker1_DoWork里赋值 dt = getDT(xx);
    接着在backgroundWorker1_RunWorkerCompleted 里dataGridView1.DataSource = dt.DefaultView;
    然后在你想更新的事件里backgroundWorker1.RunWorkerAsync();你这种情况就是还要定义一个public int CurrentPageIndex,在赋值dt时再作一下处理。