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

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

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

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

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

如楼上所示,直接在按钮的单击事件中写this.Close()就可以关闭窗体,同时相应的进程会自动关闭,不需要你自己处理。如果你是需要关闭进程的代码,则如下:

先确定你的进程 Process[] plist = Process.GetProcessesByName("这里输入你的窗体名称")

Process p = plist[0]

结束进程的方式: p.Kill() 就可以强制关掉进程。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存