c# - 关闭包含表单时终止用户控件中线程的最佳方法?

标签 c# multithreading idisposable

Dang - 10 年的 C# 编程经验,我仍然无法接受这样一个事实,即这种语言中没有类似 C++ 的析构函数。 99.9% 的时间这不是问题 - 但现在它让我明白了。

我有一个用户控件。该控件启动辅助线程。我已覆盖 Dispose() 以终止我的辅助线程,一切正常。

直到……有人在关闭表单时忘记调用 MyControl.Dispose()。然后,应用程序永远不会关闭,而我的辅助线程却在等待一个永远不会到达的关闭信号。

在我看来,我似乎不应该为一些简单的事情包括一个帮助主题,例如将我的控件放在您的表单上 - 运行您的应用程序 - 然后单击窗口关闭按钮。诸如“使用此控件时必须调用 MyControl.Dispose()!”之类的内容(当然,没有人会读)

在我看来,控件应该能够在没有任何其他交互的情况下被实例化并自动销毁自身。这在 C# 中不可能吗?有没有什么我不知道的方法可以让我的控件自动知道容器对象已经关闭,所以我也应该完成?

最佳答案

感谢 Idle_Mind,但我无法将他的评论标记为答案。所以我会回答我自己的问题并归功于他....

要使用手动线程实现相同的目的,请将 Thread 的 Thread.IsBackground() 属性设置为 true。现在线程会在应用程序退出时自动关闭,就像 BackgroundWorker() 一样。

关于c# - 关闭包含表单时终止用户控件中线程的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16715739/

相关文章:

c# - 拥有终结器的开销 - 在 Dispose 中有/没有 SuppressFinalize

c# - c#中有 "split list"方法吗?

java - 有人可以解释一下这个程序的控制台输出吗?

python - python 如何停止多线程

java - 守护线程未按预期工作

c# - 在类中多次使用 IDisposable 对象的更好方法

c# - 如果我在 SqlConnection 的 using 语句中捕获异常,using 是否仍然处理关闭和处理我的连接?

c# - 我怎样才能让一些代码行只运行一次

c# - 从字符串中删除重复的单词

c# - 将方法参数验证代码重构为Contracts - 语句反转问题