C# 我如何跟踪完成测试后仍在工作的线程?

C# 我如何跟踪完成测试后仍在工作的线程?,c#,nunit,C#,Nunit,我正在使用NUnit和Resharper。当我完成一个测试时,JetBrain:Resharper进程仍在工作,当我写出它的线程时,仍有一些线程在工作。我可以追踪它是什么类型的线程吗?我目前正在使用以下代码,但它只给我线程ID。我需要线程名称 Process[] allProcs = Process.GetProcesses(); foreach (Process proc in allProcs) { if (proc.ProcessName.StartsWith("Jet"))

我正在使用NUnit和Resharper。当我完成一个测试时,JetBrain:Resharper进程仍在工作,当我写出它的线程时,仍有一些线程在工作。我可以追踪它是什么类型的线程吗?我目前正在使用以下代码,但它只给我线程ID。我需要线程名称

Process[] allProcs = Process.GetProcesses();

foreach (Process proc in allProcs)
{
    if (proc.ProcessName.StartsWith("Jet"))
    {
        ProcessThreadCollection myThreads = proc.Threads;
        Console.WriteLine("process: {0},  id: {1}", proc.ProcessName, proc.Id);

        foreach (ProcessThread pt in myThreads)
        {
            Console.WriteLine("  thread:  {0}", pt.Id);
            Console.WriteLine("    started: {0}", pt.StartTime.ToString());
            Console.WriteLine("    CPU time: {0}", pt.TotalProcessorTime);
            Console.WriteLine("    priority: {0}", pt.BasePriority);
            Console.WriteLine("    thread state: {0}", pt.ThreadState.ToString());
        }
    }
}
上述代码的输出:

process: JetBrains.ReSharper.TaskRunner.MSIL,  id: 1884

thread:  3600
started: 27.1.2011 13.26.55
CPU time: 00:00:05.8812377
priority: 8
thread state: Running

如果ReSharper测试运行程序进程仍然存在,那么将调试器附加到它并“全部中断”以查看当前正在执行的线程

将Visual Studio调试器附加到进程

下面显示如何将VS调试器附加到正在运行的进程。选择要附加的进程时,请选择ReSharper测试运行程序

全部中断

选择此选项将挂起所有正在运行的线程,并允许您检查它们

菜单->调试->全部中断

查看线程

“线程”窗口为您提供当前正在调试的进程的所有线程的列表

菜单->调试->窗口->线程

有关“线程”窗口的更多详细信息:


您能否更具体地说明如何在VS2010中执行此操作?@Simon没问题,您需要更多关于哪些方面的详细信息,例如,您是否愿意将调试器附加到进程?@chibacity:我不知道如何将调试器附加到进程,以及“全部中断”是什么意思。@Simon没问题,但首先,是什么让你认为你有一个“NUnit线程”的问题?您所看到的细节可以使诊断变得更容易。我认为有一些线程,可能不是来自NUnit或Reformer,而是来自我的代码(一些计时器、事件、线程),即使所有事情都已处理完毕,测试也已完成,这些线程仍挂起。而重拾器进程仍在内存中。