c#中多线程写DataGridView出现滚动条导致程序卡死(无响应)的解决办法
来源:互联网 发布:姜夔 扬州慢 知乎 编辑:程序博客网 时间:2024/05/17 01:03
因为写的程序涉及到多线程维护一个DataGridView,然后蛋疼的发现经常卡死。。。一开始以为是读写冲突的原因,然后就加了锁,问题依旧。。。然后发现每次出现滚动条的时候程序才会无响应,所以感觉应该是滚动条出现问题。。。
网上说用Invoke就可以解决问题,试了一下,可能是我使用的方法不对,还是没有解决问题-_-||
最后使用InvokeRequired解决的。。。
因为我的修改DataGridView的代码是写在窗体里面的,so。。。
private static object obj = new object(); private delegate void ChangeFunction(PackageMessage pm, string Message); public void AddWarning(PackageMessage pm, string Message) { if (dgv.InvokeRequired) { ChangeFunction c = new ChangeFunction(AddWarning); this.Invoke(c, new object[] { pm, Message }); } else { lock (obj) { DataRow dr = MessageDT.NewRow(); dr[0] = pm.GetSendTime().ToString(); dr[1] = pm.GetSourceIP().ToString() + ":" + pm.GetSourcePort().ToString(); dr[2] = pm.GetDestinaionIP().ToString() + ":" + pm.GetDestinationPort().ToString(); dr[3] = Message; MessageDT.Rows.Add(dr); } } }
说明一下 dgv是一个DataGridView的对象,一开始以为绑定一个DataTable dt会好些,结果发现没用。。。然后也没删-_-||
加InvokeRequired就行了,lock的那个没加貌似也没出问题,但是为了安全起见我就加上了。。。
在else里面,或者是在lock里面(如果你加锁的话)写功能代码,if的里面形式都差不多,就是参数应该不太一样吧~
0 0
- c#中多线程写DataGridView出现滚动条导致程序卡死(无响应)的解决办法
- WinForm中出现窗体未响应,程序锁死解决办法
- sql的select出现堵塞导致程序卡死的解决方法(在事务中查询)
- C# 跨越DataGridView的滚动条截图
- C#backgroundworker中更新datagridview出现滚动条问题
- 解决DataGridView在多线程中无法显示滚动条的问题
- 解决DataGridView在多线程中无法显示滚动条的问题
- 使用eclipse 4.3 经常出现卡死、无响应情况的解决方法
- win8和win10下,visual studio 2008 调试出现无响应的卡死问题解决
- Flex 中有由于控件的属性includeInLayout导致滚动条不能出现!
- 多线程ADO数据访问程序在vmware虚拟机中执行时切换输入法导致用户界面无响应
- 因滚动条出现而导致页面晃动的解决方案
- JScrollPanel中水平滚动条的出现
- 更新DataGridView数据源导致WinForm主程序无响应
- 通过taskkill命令杀死win10系统中出现的应用假死无响应的程序进程
- ie6下iframe出现水平滚动条的解决办法
- ie6下iframe出现水平滚动条的解决办法
- ASP.NET BS 页面 出现滚动条的解决办法
- 记录ab蓝学网新改版完成
- HDU 1829 A Bug's Life
- php setcookie函数参数说明与用法
- 倦笔如椽
- 实用的七个程序段
- c#中多线程写DataGridView出现滚动条导致程序卡死(无响应)的解决办法
- 类的组合
- 动态规划之最长公共子序列
- 关于类的sizeof()
- 【ZJOI2007】仓库建设
- Eclipse调试安卓工程下的.java代码
- 第六周第七周自学内容
- 第6,7周自学内容
- man page里的manual section的定义