2

在调试 .NET Framework 3.5、WinForms 应用程序时,我发现了一些没有名称的“工作线程”。

我知道当你打开一个应用程序时,默认情况下你有一个工作线程。然而,在调试过程中,当我暂停调试器并查看“线程”窗口时,我看到大约 5+ 个类似线程(优先级=正常)。

应用程序打开的所有线程都有一个名称,所以这些不是从代码中打开的,至少不是通过 Thread.Start()

当我尝试双击时,VS.NET 也找不到代码。

这些线程是什么?它们是正常的,还是某些操作会以某种方式留下空线程?

它们可以是计时器或类似的非明显控件,函数在后台与临时线程一起使用吗?

4

3 回答 3

5

我刚刚将 VS 中的线程与 WinDbg 中的线程进行了比较,看起来 VS 在线程窗口中将线程池线程标记为“工作线程”。因此,我假设您看到的是由于使用 BackgroundWorker、Timer、BeginInvoke 或类似的线程池功能而启动的线程。

于 2009-08-30T17:00:28.387 回答
0

继续 Rushyo 的帖子,这些线程可能与 Visual Studio 如何托管和调试您的程序有关(您是否尝试过从 Visual Studio 外部运行发布版本并使用 Process Explorer 进行审查)。

如果不是 VS 托管的明确部分,它们可能与 .NET 线程池有关,用于计时器、异步方法调用。

于 2009-08-30T16:42:40.497 回答
0

当您调用 GetOpenFileName() (或引发 pen/save File Dialog 的其他函数时,Windows 将线程添加到您的应用程序的地方。

Windows 在后台执行驱动器/文件夹扫描,并且在关闭对话框后显然保持线程处于活动状态。我很久以前通过试验才发现这一点。大概还有更多这样的点。

于 2009-08-31T15:44:48.290 回答