我正在编写一些代码,它将在一个单独的线程上打开一个MessageBox,以防止MessageBox停止该程序.非常重要的是,启动一个新线程不会崩溃我正在运行的程序,但我不太了解线程以确保这种情况发生.
我的问题是,在启动线程后,如何在MessageBox关闭后安全地处理它?我想要关闭/处理它是必要的,因此它不仅仅是在创建和启动之后浮动.
请指教,谢谢!
var Thread = new Thread
(
()=>
{
MessageBox.Show("Buy pizza, Pay with snakes");
}
);
Thread.Start();
Run Code Online (Sandbox Code Playgroud)
你不需要做任何特别的事情.
当没有对它们的引用(在你的代码中)并且它们的主方法体已经终止时,线程实例被自动"清理"(而不是它们成为垃圾收集的候选者).事实上,Thread没有实现IDisposable- 所以说它的"处置"是不正确的.
在您的示例中,一旦lambda方法完成(即消息框关闭),线程将自动终止.你不需要做任何额外的事情.
现在回收分配的内存和让对象成为处理/收集的候选者之间存在差异.分配的任何对象都将保留在GC堆上,直到下一个集合清理它们为止......但您不必关心它.
您可能需要应对的另一个问题是在主UI线程以外的线程上执行UI操作.虽然有可能,但您必须小心不要引用在与您创建的线程不同的线程上创建的任何UI元素.