C#解决关闭多线程的form主窗体时抛出ObjectDisposedException 异常
一、现象:
我在主窗体新建线程,使用子线程来处理接收到的数据,并且更新窗体显示内容,但关闭主窗体程序之后就程序就报错,如下所示:
二、分析问题:
由于新建线程的处理函数里边是一直死循环处理数据,虽然窗体程序form关闭了,但后台新建的线程还在运行,新建的线程会通过this.Invoke
来更新UI主窗体线程,所以程序会报错。
private void PdoProcess()
{
//CanOpenDevice.visible
while (true)
{
GloableVar.pdocount++;
if (GloableVar.pdocount > 1000)
GloableVar.pdocount = 0;
ShowPdo(GloableVar.pdocount);
Thread.Sleep(100);
}
}
为了在关闭form主窗体程序时可以把子线程去更新UI主窗体的线程也关闭,通过使用try catch
来解决这个问题。
private void ShowPdo(int data)
{
try
{
if (this.InvokeRequired)
{
pdo pdodate = new pdo(ShowPdo);
this.Invoke(pdodate, new object[] { data });
}
else
{
textBox1.Text = data.ToString();
}
}
catch(Exception ex)
{
}
}
catch
将捕获任何发生的异常,程序一直在try
里边运行,除非try
里边的代码运行发生异常才到catch
里边运行。如上程序所示,在主窗体程序关闭后,子线程通过this.Invoke
要去更新UI主窗体程序,这时catch
就会检测到异常,程序就不会进入try
,而进入catch
而不会发生去更新UI主窗体程序的报错的问题。
三、参考文档
https://www.lanhusoft.com/Article/113.html
http://www.cnblogs.com/shuaijie/articles/3478750.html
by 羊羊得亿
2017-08-12 ShenZhen
C#解决关闭多线程的form主窗体时抛出ObjectDisposedException 异常的更多相关文章
- 执行Socket socket = new Socket(ip, port);时抛出个异常:android.os.NetworkOnMainThreadException解决办法
首先,确认你的android版本是4.0之后再用此方法解决,因为在4.0之后在主线程里面执行Http请求才会报这个错,也许是怕Http请求时间太长造成程序假死的情况吧.Android在4.0之前的版本 ...
- 多线程状态下调用SimpleDateFormat.format()抛出 ArrayIndexOutOfBoundsException 异常
本来想在类的顶部设置一个 静态的SimpleDateFormat常量 public final static DateFormat dateFormatGMT = new SimpleDateForm ...
- JMS之——ActiveMQ时抛出的错误Could not connect to broker URL-使用线程池解决高并发连接
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/69046395 解决使用activemq时抛出的异常:javax.j ms.JMSE ...
- 【VS调试】C#读写Windows 7注册表时抛出“不允许所请求的注册表访问权”的解决办法
原文:[VS调试]C#读写Windows 7注册表时抛出"不允许所请求的注册表访问权"的解决办法 项目 - 属性 - 安全性,"使用ClickOnce",修改a ...
- Visual Studio2012打开时弹出“遇到异常:这可能是由某个扩展导致的”错误的解决办法
Visual Studio2012打开时弹出"遇到异常:这可能是由某个扩展导致的"错误的解决办法: 具体问题如下: 分析原因:网上搜集了以下,出现异常的原因是安装了第三方控件,然后 ...
- 解决httpclient抛出URISyntaxException异常
这两天在使用httpclient发送http请求的时候,发现url中一旦包含某些特殊字符就会报错.抛出URISyntaxException异常,比如struts漏洞的利用url:(大括号就不行) re ...
- delphi application 和 form 主窗体 都是窗口
application 也是一个窗体, 和一般窗体不一样. 主窗体 是一个窗体. 然后这两个窗体,分别计算pid 获得结果竟然一样. 另外句柄是动态,全部都不一样.每一次都不一样.
- Android ADT插件更新后程序运行时抛出java.lang.VerifyError异常解决办法
当我把Eclipse中的 Android ADT插件从21.1.0更新到22.0.1之后,安装后运行程序抛出java.lang.VerifyError异常. 经过调查,终于找到了一个有效的解决办法: ...
- springboot springmvc 抛出全局异常解决方法
springboot中抛出异常,springboot自带的是springmvc框架,这个就不多说了. springmvc统一异常解决方法这里要说明的是.只是结合了springboot的使用而已.直接上 ...
随机推荐
- html 下载文件代码
首先在html中加个a标签 <a class="menu" href="/cmdb/file_down" download="ljctest.t ...
- 公司采购 流程flowable例子
Name: Flowable BPMN 2.0 designer Location: http://flowable.org/designer/update/ 业务描述:1. 公司采购,因为办公用品价 ...
- Long和long判断
Long需要equals 判断. long可以==
- 用Linux建立多应用系统备份服务器
用Linux建立多应用系统备份服务器 本文旨在结合自己的工作实际,利用LinuxFTP服务器建立了一个多系统备份服务器异地备份策略. 1 建立LinuxFTP服务器 使用了Red Hat Enterp ...
- apache-maven-3.0.4-bin.zip
http://zhidao.baidu.com/share/2a8974fd1546ef5f11ad9cccb3cabf88.html apache-maven-3.0.4-bin.zip
- HP 1022N 网络打印机安装步骤
HP 1022N 网络打印机安装步骤
- 关于springmvc重定向后Cannot create a session after the response has been committed问题
首先先上代码吧,我在用springmvc进行response.sendRedirect(url);操作后报了Cannot create a session after the response has ...
- 紫书 例题 9-1 UVa 1025 ( DAG的动态规划)
影响到状态的只有时间和在哪个车站(空间),所以可以设f[i][j]是时刻i的时候在第j个车站的最少等待时间 因为题目中的等待时间显然是在0时刻1车站,所以答案为f[0][1],那么就提醒我们从大推到小 ...
- 使用scatter画散点图
刚开始接触Python,照着例子写的代码,百度注释的. from numpy import * import matplotlib import matplotlib.pyplot as plt im ...
- 便捷编程-Xcode常用第三方插件 (随时更新)
Xcode工具插件 1.XAlign 让Xcode编辑器中的代码以多种方式瞬间对齐 地址:https://github.com/qfish/XAlign 2.VVDocumenter-Xcode 在X ...