我有一个.NET (C#)多线程应用程序,我想知道某个方法是否在终结器线程中运行。
我尝试过使用Thread.CurrentThread.Name,但它不起作用(返回null)。
有人知道如何查询当前线程来发现它是否是终结器线程吗?
发布于 2008-11-25 19:06:49
标识线程的最好方法是通过它的托管id:
Thread.CurrentThread.ManagedThreadId;因为终结器总是在GC的线程中运行,所以您可以创建一个终结器,它将线程id (或线程对象)保存在静态验证器中。
示例:
public class ThreadTest {
public static Thread GCThread;
~ThreadTest() {
ThreadTest.GCThread = Thread.CurrentThread;
}
}在您的代码中,只需创建此类的一个实例并执行垃圾收集:
public static void Main() {
ThreadTest test = new ThreadTest();
test = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine(ThreadTest.GCThread.ManagedThreadID);
}发布于 2009-01-11 21:30:51
如果可以进行调试,您可以使用WinDbg + SoS.dll轻松找到它。!threads命令显示应用程序中的所有托管线程,并使用注释特别突出显示终结器线程。
发布于 2008-11-25 19:55:30
Y Low的代码可以稍微改进一下...
public static void Main()
{
ThreadTest test = new ThreadTest();
test = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine(ThreadTest.GCThread.ManagedThreadID);
}https://stackoverflow.com/questions/318462
复制相似问题