C#winform使用了多线程,有时候程序再运行中直接就退出了!

C#winform使用了多线程,有时候程序再运行中直接就退出了!,第1张

直接退出是你的程序后台出现错误或是触发了异常所致,鉴于你同时用了timer和线程去刷新listView数据,可能是你创建线程刷新数据那里出错了~这个需要具体调试,但是我想说的是你的线程和timer

做的是同一件事情,timer本身就是实时去检测并刷新listView数据源的,socket无非是在接受到消息时刷新而已不是实时检测,你为什么要创建线程去刷新,每次接收到消息创建一个线程,用完之后又得销毁,之后收到消息又得重复同样的创建-销毁,浪费资源不说,还那么麻烦,你为什么不把刷新数据源封装成一个公共方法,timer里调用,当socket接收到消息时再调用即可,都可执行又不冲突~

这种有多半是由于线程冲突造成的。多半涉及到你线程中 *** 作的对象的“释放”没处理好。

(你可以打开此程序,然后到“任务管理器”中查看此程序的“线程数、IO读取写入、“GDI对象”、“内存占用”等信息,是否正常。记录下数据,然后程序开几分钟后,再看看。)

程序退出的方法:this.Close() 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;Application.Exit() 强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出;Application.ExitThread()强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题;System.Environment.Exit(0) 这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7748740.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存