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); } }
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号