在调试.NET Framework 3.5,WinForms应用程序时,我发现了一些没有名称的“工作线程”。
我知道当你打开一个应用程序时,默认情况下你有一个工作线程。但是在调试过程中,当我暂停调试器并查看“线程”窗口时,我看到大约5个以上类似的线程(优先级=正常)。
应用程序打开的所有线程都有一个名称,所以这些不是从代码中打开的,至少不是通过Thread.Start()
当我尝试双击时,VS.NET也找不到代码。
这些线程是什么?它们是正常的,还是某些操作会以某种方式留下空线?
它们可以是定时器还是类似的非显而易见的控件,函数可以在后台使用临时线程吗?
答案 0 :(得分:5)
我只是将VS中的线程与WinDbg中的线程进行比较,看起来VS在线程窗口中将线程池线程标记为“工作线程”。因此,我假设您所看到的是由于使用BackgroundWorker,Timer,BeginInvoke或类似的线程池功能而启动的线程。
答案 1 :(得分:0)
继续Rushyo的帖子,这些线程可以与Visual Studio托管和调试程序的方式相关(您是否尝试从Visual Studio外部运行发布版本并使用Process Explorer进行仔细检查)。
如果没有明确地成为VS托管的一部分,它们可能与.NET线程池有关,用于定时器,异步方法调用。
答案 2 :(得分:0)
当你向应用程序添加线程时,就是你调用GetOpenFileName()(或其他引发ppen / save文件对话框的函数。)
Windows在后台执行驱动器/文件夹扫描,它显然在关闭对话框后保持线程活动。我刚刚通过试验发现了这一点。可能会有更多这样的观点。