datagridview虚拟模式中的异步读写问题

背景:将项目中的表格Datagridview改成虚模式的表后,虽然初始化加载和滑动确实快了很多,但是在往_tabledata中不断加入数据的时候,表中总有黑块,然后总会在dataGridView1_CellValueNeeded的第一行报越界的错误,跟的时候又会发现e.rowIndex< _tabledata.Count;检查后发现,对_tabledata的数据添加,是在异步的任务执行得到结果的时候Add的,这个过程中忘记加锁了,这样和直接在UI中AddRow还是会不一样的,因为现在维护的是_tabledata对象。

解决办法:

  定义一个用来加锁的同步对象,两个都是readonly

 public readonly BindingList<YBrainTaskFile> _tabledata = new BindingList<YBrainTaskFile>();
 private static readonly object _dataLock = new object();

  在对_tabledata的操作,都加锁,避免读写冲突

lock (_dataLock)
{
    foreach (var gbFile in _historyFile)
    {
        _counter.Increment();
        _tabledata.Add(gbFile);
    }
}

 

posted @ 2025-07-14 19:07  Wind_Swing_Dunn  阅读(10)  评论(0)    收藏  举报