我有一个名为 Class
的类,它在其构造函数中创建一个 Thread
。该线程运行一个 while(true)
循环,从 NetStream
中读取非关键数据。线程将在析构函数中被中止:
~Class()
{
_thread.Abort();
_thread = null;
}
当程序想要结束使用Class
类的实例 - ClassInstance
时,它会调用:
ClassInstance = null;
GC.Collect;
我原以为这意味着~Class()
会在此时自动调用,但实际上并不是这样的。即使在执行了
Application.Exit()
并从Main()
返回后,该线程仍然在运行。
null
不等同于调用析构函数!实际上,它对对象实例几乎没有影响,只是少了一个引用。 - Thorsten DittmarCriticalFinalizerObject
解决了一些松散的问题,但仍然存在某些情况(尽管非常有限),其中最终器可能无法完整运行。根据提供的信息,我认为可以安全地假定这些情况都没有发生。 - Brian GideonThread.Abort
是一个可怕的想法。这就像是通过射击司机来停止一辆汽车。汽车会停下来,但无法预测在此过程中会造成什么样的损害。 - Jim Mischel_thread
有机会优雅地结束后才会执行,因为它正在监听的Event
已经发出信号,并且终止程序已经等待完成。 - Edgar James luffternstat