C#解决关闭多线程的form主窗体时抛出ObjectDisposedException 异常
2024-08-26 20:04:00
一、现象:
我在主窗体新建线程,使用子线程来处理接收到的数据,并且更新窗体显示内容,但关闭主窗体程序之后就程序就报错,如下所示:
二、分析问题:
由于新建线程的处理函数里边是一直死循环处理数据,虽然窗体程序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
最新文章
- dubbox微服务实例及引发的“血案”
- tomcat accesslog日志扩展
- Balanced Binary Tree [LeetCode]
- javascripts学习笔记(五):用js来实现缩略语列表、文献来源链接和快捷键列表。
- Win7另存文件没有桌面的解决方法
- JavaMail入门第四篇 接收邮件
- It is indirectly referenced from required .class files
- java scoket (UDP通信模型)简易聊天室
- YUI Array 之 indexOf(索引值|搜索)
- hdu 4628 Pieces 状压dp
- Date、DateTime值的格式化扩展函数
- JS 实现图片直接下载
- pig的一些实例(我常用的语法)
- Scanner的使用 猜数字 +猜电影
- LeetCode - Merge Two Binary Trees
- node爬虫(转)
- pg数据库杀掉连接
- Linux 多线程编程—使用条件变量实现循环打印
- Jmeter-Maven-Plugin高级应用:Configuring the jvm that the jmeter process runs in
- 28.OGNL与ValueStack(VS)-总结$ # %的区别
热门文章
- leetcode第一刷_Text Justification
- Dom4j 查找节点或属性
- sqlserver自定义函数(标量值函数,表值函数)
- Linux常用图片查看处理软件
- js sort()函数 排序问题 var arr =['A-1-5-1','A-1-10-2','A-1-5-5','B-2-3-1','C-4-10-1'], 对这个数组进行排序,想达到的效果是[";A-1-5-1";, ";A-1-5-5";, ";A-4-10-1";, ";A-1-10-2";, ";A-2-3-1";]
- jquery点击弹框外层关闭弹框
- Swift学习笔记(9)--闭包
- CSUOJ 1603 Scheduling the final examination
- hiho week 37 P1 : 二分·二分查找之k小数
- Maintaining processor resources during architectural events