如果我在.Net中放弃用户控件中的线程会发生什么

时间:2010-12-17 19:08:39

标签: vb.net multithreading controls

假设我已经在控件中创建了一个Thread来监视文件中的更改,并在发生时通知用户。 如果表单已关闭,因此我的控件被隐藏,该线程会发生什么?它会永远运行吗?它是否以某种方式绑定到控件并使用控件收集垃圾?如果控件被垃圾收集并且线程一直在运行会导致应用程序出错吗?

我问,因为我不确定当控件的父窗体关闭时,我会在UserControl中使用什么事件来停止线程,或者如何发信号停止。所以我很好奇如果我什么都不做会发生什么。

2 个答案:

答案 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

相关问题