首页 新闻 会员 周边 捐助

c# winform 关闭窗体时,如何正确结束线程???悬赏酌情追加!!还请大神现身~

-1
[已解决问题] 解决于 2020-04-13 08:55

目前知道在线程那里设置个属性
Thread th = new Thread(Excute);
th.IsBackground = true;
这样就基本上可以解决问题了。
这个属性的意思就是把线程设置为后台线程。
然后关闭进程的同时,线程也会随之关闭。想知道除了这个方法。
不知道各位还有什么妙招?????
比如C#本有的TcpClient.BeginConnect方法是异步请求连接(也是一个开启线程的方法)。如果在开始连接的时候,关闭窗体,应该做什么处理??????

度娘说:
程序退出的方法:
this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;
Application.Exit(); 强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出;
Application.ExitThread(); 强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题;
System.Environment.Exit(0); 这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。
我是用了 th.IsBackground = true 就解决了的,System.Environment.Exit(0);是不是更彻底些呢???????
不过个人觉得这些方法太过暴力解决,我觉得应该有更合适更正确的处理程序的方法,还请各大网友相助!!!
推荐我看什么书或者提供什么方法,思路什么都行!

😀明笔记的主页 😀明笔记 | 初学一级 | 园豆:13
提问于:2020-03-23 16:48
< >
分享
最佳答案
0

正常情况下,程序员是需要自己负责回收垃圾的,更合适更正确的方法,就是你自己回收。
除非你很确定系统能帮你回收的情况。

奖励园豆:5
爱编程的大叔 | 高人七级 |园豆:30844 | 2020-03-23 17:43

现在就是想知道具体的回收方法的思路或者常用方法

😀明笔记 | 园豆:13 (初学一级) | 2020-03-23 17:44

@😀明笔记:
你开的线程,你就可以在窗体关闭的时候回收,窗体关闭是有事件的。

爱编程的大叔 | 园豆:30844 (高人七级) | 2020-03-23 17:47

@爱编程的大叔: 我现在就是这样写的。不过我遇到一个问题。就是我把回收线程的代码放在窗口关闭的事件里,然后调试会偶尔报错,报错是:回收的线程里的一个方法发生了空引用的报错---
如果在回收线程后面加一个弹框就不会报错了。你知道是是什么原因吗?

😀明笔记 | 园豆:13 (初学一级) | 2020-03-23 17:52

@😀明笔记:
很显然就是发生了空引用的错误,因为你关闭窗体,有些对象已经被回收了,找到这个错误发生的位置有助于您更好的写防御性代码,空引用错误是最常见的错误。
很遗憾没有代码只能这样泛泛而谈,这种经验必须靠你一个个代码调试积攒的。

爱编程的大叔 | 园豆:30844 (高人七级) | 2020-03-23 18:00

@爱编程的大叔:我加了多线程的程序,就很容易发生偶然性的报错。根据异常信息百度常常百度不到问题上,让我很是烦恼,手忙脚乱。。。 能否提供一些解决偶然性发生的报错思路呢?或者来点经验之谈呢?

😀明笔记 | 园豆:13 (初学一级) | 2020-03-23 18:04

@😀明笔记:
Winform 下去极少使用Thread,需要使用并配合UI的时候,我选择用BackgroundWorker,这样当完成工作时,处理线程是在主线程上。
经验之谈,其实很多书上也都说了,比如

  1. 函数或者过程不要超过30行。 一个函数或者过程只做一件事
  2. 学习TDD,让你的函数或者类可测试。
  3. 记录日志。
    4...
爱编程的大叔 | 园豆:30844 (高人七级) | 2020-03-24 21:52

@爱编程的大叔: 关于BackgroundWorker、Thread和Task三个都是多线程的,如何抉择?区别在哪?

😀明笔记 | 园豆:13 (初学一级) | 2020-03-25 11:16

@😀明笔记: 看书。

爱编程的大叔 | 园豆:30844 (高人七级) | 2020-03-25 11:44

@爱编程的大叔: 好的谢谢

😀明笔记 | 园豆:13 (初学一级) | 2020-03-26 10:19
其他回答(1)
0

建议写日志,帮助定位错误位置。

会长 | 园豆:12463 (专家六级) | 2020-03-24 11:56

是记录在txt文本下之类的吗?

支持(0) 反对(0) 😀明笔记 | 园豆:13 (初学一级) | 2020-03-25 11:16

@😀明笔记: 是啊

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2020-03-25 12:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册