默认情况下程序启动后到底是几个线程?
2010-03-13 22:06
253 查看
默认情况下,在调试状态下我们可以看到下面的效果
![](http://images.cnblogs.com/cnblogs_com/chenxizhang/WindowsLiveWriter/3dd1b29a9549_1366F/image_thumb.png)
这里面的线程中
主线程 不必多说,就是程序的主要工作线程
SystemEvents线程之前探讨过是系统事件触发之后的工作线程
另外几个线程,很奇怪。但至少那个vshost.RunParkingWindow,从字面上说可能与vshost有关
接下来,我们尝试禁用掉vshost(下图中禁用“启用Visual Studio宿主进程”)
![](http://images.cnblogs.com/cnblogs_com/chenxizhang/WindowsLiveWriter/3dd1b29a9549_1366F/image_thumb_1.png)
再来看线程信息
![](http://images.cnblogs.com/cnblogs_com/chenxizhang/WindowsLiveWriter/3dd1b29a9549_1366F/image_thumb_2.png)
整个世界清净多了,现在就剩下了一个线程。这与我们一般意义上讲的单线程程序是相吻合的。
那么,为什么连那个System Events线程都没有了呢?这是因为我们当前程序并没有监控有关的SystemEvents事件,所以它默认是不会创建这个线程的
如果我们添加了如下的代码
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
那么,此时就可以看到那个辅助线程了
![](http://images.cnblogs.com/cnblogs_com/chenxizhang/WindowsLiveWriter/3dd1b29a9549_1366F/image_thumb_3.png)
那么,到这里为止,你应该知道了,一个应用程序开起来之后到底会有几个线程了吧?
![](http://images.cnblogs.com/cnblogs_com/chenxizhang/WindowsLiveWriter/3dd1b29a9549_1366F/image_thumb.png)
这里面的线程中
主线程 不必多说,就是程序的主要工作线程
SystemEvents线程之前探讨过是系统事件触发之后的工作线程
另外几个线程,很奇怪。但至少那个vshost.RunParkingWindow,从字面上说可能与vshost有关
接下来,我们尝试禁用掉vshost(下图中禁用“启用Visual Studio宿主进程”)
![](http://images.cnblogs.com/cnblogs_com/chenxizhang/WindowsLiveWriter/3dd1b29a9549_1366F/image_thumb_1.png)
再来看线程信息
![](http://images.cnblogs.com/cnblogs_com/chenxizhang/WindowsLiveWriter/3dd1b29a9549_1366F/image_thumb_2.png)
整个世界清净多了,现在就剩下了一个线程。这与我们一般意义上讲的单线程程序是相吻合的。
那么,为什么连那个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); } } }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
那么,此时就可以看到那个辅助线程了
![](http://images.cnblogs.com/cnblogs_com/chenxizhang/WindowsLiveWriter/3dd1b29a9549_1366F/image_thumb_3.png)
那么,到这里为止,你应该知道了,一个应用程序开起来之后到底会有几个线程了吧?
相关文章推荐
- 默认情况下程序启动后到底是几个线程?
- vs2003生成的程序,启动默认以管理员身份运行
- 一个JVM进程启动后里面有几个线程
- .NET程序默认启动线程数
- jvm启动时有几个线程
- 如何在程序启动默认浏览器与电子邮件系统
- Java第七课 Java的多线程程序进程和线程的概念,实现多线程的两种方式,线程同步的原理,线程的死锁,运用wait和notify来实现producer - consumer关系,线程终止的两种情况。
- Handler默认情况下与调用它的Activity是处于同一个线程的实例证明
- 从启动模式为singleInstance的Activity启动到默认情况的Activity
- sqlserver2005默认情况下是禁用了tcp/ip连接。启动tcp/ip连接的方法,
- .NET程序默认启动线程数
- 基于.NET程序默认启动线程数讲解
- 如何在程序启动默认浏览器与电子邮件系统
- Process.GetProcessesByName ,返回一个Process[],这句话是判断当前程序启动了几个
- Java启动时默认创建了多少线程
- 解决线程中有阻塞情况下程序退出不了
- 线程,是不是打破了“程序是顺序执行“的真谛?如一个main函数中,顺序定义了二个线程,并启动,第一个线程还没执行完,第二个线程就开始执行了
- 如何设置vs中F5默认的启动程序
- window程序一个线程中可以有几个消息队列?和几个消息循环
- 创建自己的Application,以在整个应用中分享数据(程序启动时会默认创建一个Application)