版权声明:本文为博主原创文章,未经博主同意不得转载。

https://blog.csdn.net/u013529927/article/details/24225567

由于写的程序涉及到多线程维护一个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的里面形式都几乎相同。就是參数应该不太一样吧~

c#中多线程写DataGridView出现滚动栏导致程序卡死(无响应)的解决的方法的更多相关文章

  1. C#中多线程写DataGridView出现滚动条导致程序卡死(无响应)的解决办法

    因为写的程序涉及到多线程维护一个DataGridView,然后蛋疼的发现经常卡死...一开始以为是读写冲突的原因,然后就加了锁,问题依旧...然后发现每次出现滚动条的时候程序才会无响应,所以感觉应该是 ...

  2. FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法

    出现问题场景:       作为刚接触FreeRTOS实时操作系统的菜鸟,我在练习一个程序功能:按键3按下,将LED闪烁的任务挂起:按键4按下,将LED闪烁的任务恢复到就绪.按键使用外部中断.恢复就绪 ...

  3. 使用multiprocessing解决PyMuPDF不支持多线程加载导致的界面卡死无响应问题,及一个PyQt5实现的简易PDF阅读器例子

    最近在用PyMuPDF实现一个PDF阅读器,发现PyMuPDF在加载某些epub时耗时非常长,有的长达10几秒,会导致界面卡死无响应. 尝试用多线程后台加载,发现还是不能解决问题,和作者交流(issu ...

  4. 【PyCharm疑问】在pycharm中带有中文时,有时会导致程序判断错误,是何原因?

    1.会导致程序打印false错误的代码如下: # -*- coding:utf-8 -*- import os import sys from uiautomator import device as ...

  5. 【转载】Java中如何写一段内存泄露的程序 & ThreadLocal 介绍和使用

    可以参考这段文章: link A1:通过以下步骤可以很容易产生内存泄露(程序代码不能访问到某些对象,但是它们仍然保存在内存中): 上文中提到了使用ThreadLocal造成了内存泄露,但是写的不清不楚 ...

  6. 关于servlet中要写初始化逻辑应该重载有参还是无参的init

    关于开发者在写初始化逻辑的时候,应该选用的哪个init方法@author mzy 在查看servlet的源码的时候,因为servlet是一个接口使用较麻烦: 所以我们使用它的实现类:GenericSe ...

  7. Android Eclipseproject开发中的常见调试问题(二)android.os.NetworkOnMainThreadException 异常的解决的方法

    android.os.NetworkOnMainThreadException 异常的解决的方法. 刚开是把HttpURLConnectionnection 打开连接这种方法放在UI线程里了,可能不是 ...

  8. 关于 OnCloseQuery: 顺序、不能关机等(所有的windows的广播消息都是逐窗口传递的)——如果一个窗体的OnCloseQuery事件中如果写了代码那么WM_QUERYENDSESSION消息就传不过去了msg.result会返回0,关机事件也就停止了

    系统关闭窗体的事件顺序为: OnCloseQuery ----> OnClose ----> OnDestroy 下面的代码说明问题: unit Unit3; interface uses ...

  9. 谷歌下解决Pop遮罩层无法遮挡滚动栏下问题

    今天用pop的弹出窗体里,出现一个问题,当网页出现滚动栏里,不能遮挡住,解决Pop遮罩层无法遮挡滚动栏下问题. 可通过下载获取改动后的代码----->进入下载

随机推荐

  1. Nginx 初探

    Nginx简介 Nginx(engine X)是一个开源.轻量级.高性能的HTTP和反向代理服务器,可以代理HTTP. IMAP/POP3/SMTP和TCP/UDP协议:其特点是占用内存少,并发能力强 ...

  2. 性能测试脚本开发(C&C#&Java)

    一.C语言实现及相关问题解决 LR:C函数-功能描述 LR:C函数-适用范围 LR:C函数-头信息传递 LR:C函数-字符串编码转换 lr_convert_string_encoding(" ...

  3. 服务器,数据库连接注意mysql的user表

    update user set host='localhost' where user='root';

  4. TCP/IP详解 卷一(第四、五章 ARP、RARP)

    数据链路如 以太网都有自己的寻址机制(MAC)地址,而IP层使用的是IP地址. 当一台主机把以太网数据发送定位于同一局域网上的另一台主机时,是根据MAC地址来确定目的接口的.设备驱动程序从不检查IP数 ...

  5. Mjpg_Streamer 的移植

    1. 移植mjpg-streamer a.1 移植libjpeg tar zxf libjpeg-turbo-1.2.1.tar.gz cd libjpeg-turbo-1.2.1 ./configu ...

  6. HttpRuntime Cache用法及参数解释

    自己用到的: HttpRuntime.Cache.Insert("SchoolBindKcChangci", SchoolBindKcChangci, null, DateTime ...

  7. Skia构建系统与编译脚本分析

    分析下Skia的构建系统,详细编译过程參看Windows下从源代码编译Skia.这里以ninja为例来分析.运行以下三条命令就能够完毕编译: SET "GYP_GENERATORS=ninj ...

  8. C语言重要概念汇总

    作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:https://github.co ...

  9. cheap louis vuitton outlet

    <h1>louis vuitton outlet store</h1>2 nigerian networking systems chosen seeing that enem ...

  10. the Determine in June

    今天是6月10号,周三. 自己做的CSDN博客端(仿小巫博客,ps:里边的框架和代码优化都是自己又一次用新框架做的或者自己又一次实现)也已经有三天了.进度还差非常多--- 结合了上次投简历的经验和期末 ...