默认情况下,在调试状态下我们可以看到下面的效果
这里面的线程中
- 主线程 不必多说,就是程序的主要工作线程
- SystemEvents线程之前探讨过是系统事件触发之后的工作线程
- 另外几个线程,很奇怪。但至少那个vshost.RunParkingWindow,从字面上说可能与vshost有关
接下来,我们尝试禁用掉vshost(下图中禁用“启用Visual Studio宿主进程”)
再来看线程信息
整个世界清净多了,现在就剩下了一个线程。这与我们一般意义上讲的单线程程序是相吻合的。
那么,为什么连那个System Events线程都没有了呢?这是因为我们当前程序并没有监控有关的SystemEvents事件,所以它默认是不会创建这个线程的
如果我们添加了如下的代码
using System;
using System.Threading;
using Microsoft.Win32;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main Thread ID:{0}", Thread.CurrentThread.ManagedThreadId);
SystemEvents.TimerElapsed += new TimerElapsedEventHandler(SystemEvents_TimerElapsed);
SystemEvents.CreateTimer(1000);
Console.Read();
}
static void SystemEvents_TimerElapsed(object sender, TimerElapsedEventArgs e)
{
Console.WriteLine("System Events Thread ID:{0}",Thread.CurrentThread.ManagedThreadId);
}
}
}
那么,此时就可以看到那个辅助线程了
那么,到这里为止,你应该知道了,一个应用程序开起来之后到底会有几个线程了吧?