或者可以做这样的事情:
new Thread( new ThreadStart( delegate { DoSomething(); } ) ).Start();
?
我似乎记得在这种情况下,Thread对象将被垃圾收集,但底层的OS线程将继续运行,直到委托的结尾传递给它.我基本上是在寻找ThreadPool功能,但不希望线程成为后台线程(即我希望它们让应用程序保持活动状态).
更新:
根据Jason的说法,CLR实际上在运行时保留了对Thread对象的内部引用,因此在线程退出之前不会对其进行垃圾回收.
我一般发现,如果我需要像你在你的例子中那样直接启动一个新线程,而不是从线程池中抓取一个,那么它是一个长时间运行的线程,我将需要稍后引用它来杀死它对于短期运行线程,如在后台线程上调用IO等,我总是使用线程池线程(通常间接通过someDelete.BeginBlah(...)方法调用).当使用这样的线程池线程时,我更喜欢不保留引用.我不知道另一个程序员是否可能不恰当地使用对该线程的引用.如果我不需要引用,我不会留下它来混乱代码.
编辑: 要回答有关正在进行垃圾回收的线程的编辑,在线程运行时不会发生这种情况.CLR保留对每个正在运行的线程的引用.不会收集表示该线程的对象.