解释Visual Studio 2005线程窗口

时间:2008-10-25 05:04:04

标签: .net visual-studio multithreading

我在Visual Studio 2005中创建了一个简单的.NET窗口应用程序,只需输入主窗体加载事件,我的线程窗口如下图所示:

http://img519.imageshack.us/my.php?image=threadshh4.jpg

我的问题是

1)当我没有开始任何线程时,为什么首先有这么多线程(除了我的应用程序的'主线程')

2)这个名为'.Net SystemEvents'的帖子做了什么?

3)为什么除主线程之外的所有线程的“位置”列下的条目都为空?

修改
4)是否有可能使这些线程无法启动?或者过一段时间后离开? 5)他们打算做什么?他们的目的是什么?

2 个答案:

答案 0 :(得分:3)

1)它们是作为托管框架一部分的线程。

2)它监视您可以注册事件处理程序的系统事件,例如当您更改显示设置等时。

3)因为它们是框架的一部分而不是您的应用程序代码,所以调试器不知道源位置。

答案 1 :(得分:0)

请记住,非托管线程和托管线程之间存在一对多的关系。

有一种方法可以将SystemEvents通知程序移动到您的线程中:

public static class ThreadingHelper_NativeMethods
{
   [DllImport("user32.dll")]
   public static extern bool IsGUIThread(bool bConvert);
}


     // This code forces initialization of .NET BroadcastEventWindow to the UI thread.
     // http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/fb267827-1765-4bd9-ae2f-0abbd5a2ae22
     if (ThreadingHelper_NativeMethods.IsGUIThread(false))
     {
        Microsoft.Win32.SystemEvents.InvokeOnEventsThread(new MethodInvoker(delegate()
        {
           int x = 0;
        }));
     }