默认情况下程序启动后到底是几个线程?

默认情况下,在调试状态下我们可以看到下面的效果

image

这里面的线程中

  • 主线程 不必多说,就是程序的主要工作线程
  • SystemEvents线程之前探讨过是系统事件触发之后的工作线程
  • 另外几个线程,很奇怪。但至少那个vshost.RunParkingWindow,从字面上说可能与vshost有关

 

接下来,我们尝试禁用掉vshost(下图中禁用“启用Visual Studio宿主进程”)

image

再来看线程信息

image

整个世界清净多了,现在就剩下了一个线程。这与我们一般意义上讲的单线程程序是相吻合的。

那么,为什么连那个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);
        }

    }
}

那么,此时就可以看到那个辅助线程了

image

那么,到这里为止,你应该知道了,一个应用程序开起来之后到底会有几个线程了吧?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值