【大坑】DataGridView多线程更新修改Cell单元格卡死

  今天做个小工具,因为最近经常用到DataGridView,所以这次没有选择ListView。忙活了一个小时终于完工了,先运行看看吧。咦!!!!怎么卡死了。代码应该没问题呀,用的多线程也不会卡UI线程呀,打开分析工具查看DataGridView赋值Cell单元格占用CPU达到了80~90,公司的G3260不堪重负的挂掉了。

BackgroundWorker解决问题

  上园子里找答案,解决办法倒是找到了几种。但是都不靠谱,一样的卡死,看到博问里面说用BackgroundWorker试试。BackgroundWorker什么鬼,以前还真没接触过。立即百度一下。BackgroundWorker组件用来执行诸如数据库事务、文件下载等耗时的异步操作。原来是这么一个东西,拖了个控件上去马上就好了,但是程序运行起来又抛异常,BackgroundWorker不能支持多个并发的异步操作。还是在线程里自己创建对象动态绑定事件吧,最后运行起来界面不卡了,CPU也正常了,问题解决。

var bw = new BackgroundWorker (); //创建对象

bw.RunWokerAsync();//开始异步操作,可传递一个object参数

bw.DoWork+=(obj,ee)=>
{
     //动态绑定事件
}
时间: 2024-12-24 18:01:12

【大坑】DataGridView多线程更新修改Cell单元格卡死的相关文章

DataGridView获取或者设置当前单元格的内容

当前单元格指的是DataGridView焦点所在的单元格,它可以通过DataGridView对象的CurrentCell属性取得.如果当前单元格不存在的时候,返回null. 取得当前单元格的内容: object obj = this.dgv_PropDemo.CurrentCell.Value; 注:返回值是object类型的. 取得当前单元格的列Index: int columnIndex = this.dgv_PropDemo.CurrentCell.ColumnIndex; 取得当前单元格

C# 线程中更新ListView某单元格导致闪烁问题的解决

项目中需要用线程处理一些事务.处理结果(已经处理的比例)随时显示在ListView的某区域. 由于线程循环动作较快,导致被更新的单元格甚至所在行都有闪烁现象. 后来考虑到线程算的值整数部分未必变化很快,于是将线程的刷新值和单元格中现有值比较,不同再更新. 做了此细节后,闪烁现象居然好很多了. 也算无心插柳柳成荫吧. 2017年6月28日22:49:51

DataGridView使用技巧十一:DataGridView用户输入时,单元格输入值的设定

通过DataGridView.CellParsing事件可以设定用户输入的值.下面的示例:当输入英文文本内容的时候,立即被改变为大写.DataGridView.CellParsing在离开编辑的单元格之后会被触发. 示例: 1 private void dgv_Users_CellParsing(object sender, DataGridViewCellParsingEventArgs e) 2 { 3 DataGridView dgv = sender as DataGridView; 4

DataGridView使用技巧十:单元格表示值的自定义

通过CellFormatting事件,可以自定义单元格的表示值.(比如:值为Error的时候,单元格被设定为红色) 示例: 1 private void dgv_Users_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 2 { 3 try 4 { 5 if (e == null || e.Value == null || !(sender is DataGridView)) 6 return; 7 Dat

QTableView中修改某个单元格或者行或者列内容颜色

QTableView的单元格内容实现还是继承了TableViewModel类的data(const QModelIndex &index, int role) const函数,那个设置颜色的问题也就在这个里面实现了. 1.设置某个单元格颜色 1 QVariant TableViewModel::data(const QModelIndex &index, int role) const 2 { 3 if (!index.isValid()) 4 return QVariant(); 5 i

Cell单元格的重用

iOS设备的内存有限,如果用UITableView显示成千上万条数据,就需要成千上万个UITableViewCell对象的话,那将会耗尽iOS设备的内存.要解决该问题,需要重用UITableViewCell对象 重用原理:当滚动列表时,部分UITableViewCell会移出窗口,UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用.当UITableView要求dataSource返回UITableViewCell时,dataSource会先查看这个对象池,

获得点击的button所在的cell单元格

自定义cell,button,tableView UITableView *cell = (UITableView *)[[self.btn superview] superview] ; NSIndexPath *index = [self.tableView indexPathForCell:cell]; NSLog(@"index is = %li",(long)index.row);

C# DataGridView 列自动排序时单元格背景色丢失

百度了下大家处理比较复杂 我是这么处理的,把设置颜色的代码写在RowPostPaint事件中,执行之前判断一下 当前行数,在最后一行时候执行,避免频繁设置颜色. private void DGV_CW_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { if (e.RowIndex == DGV_CW.RowCount-1) set_cw_grid(); // 设置grid颜色 }

c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)

一.单元格内容的操作 *****// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index       Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex); // 取得当前单元格的行 Index       Console.WriteLine(DataGridView1.CurrentCell.RowIndex); ******