在我的用户控件中终止线程的最好方法,当包含表单关闭时
本文关键字:方法 包含 表单 控件 用户 我的 终止 线程 | 更新日期: 2023-09-27 18:15:06
Dang - 10年的c#编程经验,我仍然无法接受这个语言中没有类似c++的析构函数这一事实。在99.9%的情况下,这不是一个问题,但现在它让我感到困扰。
我有一个UserControl。该控件启动一个辅助线程。我已经重写了Dispose()来终止我的二级线程,这一切都工作了。
直到……有人在关闭窗体时忘记调用MyControl.Dispose()。然后应用程序永远不会关闭,而我的二级线程则在等待一个永远不会到达的关闭信号。
它只是似乎不正确,我必须包括一些简单的帮助主题,把我的控制在你的表单-运行你的应用程序-然后点击窗口关闭按钮。类似于"当你使用这个控件的时候,你必须调用MyControl.Dispose() !"(当然,没有人会读)
在我看来,控件应该能够被实例化并在没有任何其他交互的情况下自动销毁自己。这在c#中是不可能的吗?是否有一些方式我不知道我的控制自动知道容器对象已经关闭,所以我也应该完成?
感谢Idle_Mind,但我不能将他的评论标记为答案。所以我要回答我自己的问题,并给他信用....
要实现与手动线程相同的效果,将线程的Thread. isbackground()属性设置为true。现在,当应用程序退出时,线程将自动关闭,就像BackgroundWorker()一样。
但是c#中有析构函数。如果你有一个dispose函数,就像这里一样使用它,如果以前没有调用dispose,则在析构函数中调用它。
处理