假设我已经在控件中创建了一个Thread来监视文件中的更改,并在发生时通知用户。 如果表单已关闭,因此我的控件被隐藏,该线程会发生什么?它会永远运行吗?它是否以某种方式绑定到控件并使用控件收集垃圾?如果控件被垃圾收集并且线程一直在运行会导致应用程序出错吗?
我问,因为我不确定当控件的父窗体关闭时,我会在UserControl中使用什么事件来停止线程,或者如何发信号停止。所以我很好奇如果我什么都不做会发生什么。
答案 0 :(得分:2)
这实际上取决于线程的类型。如果它是Background Thread
,它会在Main Thread
死亡后立即死亡。
如果它不是Background Thread
,它将保持活力。您的用户界面将被关闭,但您仍然可以在exe
中看到Task Manager
。你可以从那里杀死它。
您可以使用Background
属性将线程标记为IsBackground
。你必须在开始你的线程之前做到这一点。
Thread thread = new Thread(DoWork);
thread.IsBackground = true;
thread.Start();
答案 1 :(得分:1)
VB.NET Application does not fully close 阅读Pavel Minaev的回答和以下评论。
在FormClosing中甚至你的表单中添加此代码以中止你的线程。
yourThreadname.Abort