1.主线程
当一个程序启动时,就有一个进程被操做系统(OS)建立,与此同时一个线程也马上运行,该线程一般叫作程序的主线程(Main Thread),由于它是程序开始时就执行的,若是你须要再建立线程,那么建立的线程就是这个主线程的子线程。每一个进程至少都有一个主线程,在Winform中,应该就是建立GUI的线程。主线程的重要性体如今两方面:1.是产生其余子线程的线程;2.一般它必须最后完成执行好比执行各类关闭动做。html
2.前台线程,后台线程,托管线程,守护线程this
CLR能区分两种不一样类型的线程:前台线程和后台线程。这二者的区别就是:应用程序必须运行完全部的前台线程才能够退出;而对于后台线程,应用程序则能够不考虑其是否已经运行完毕而直接退出,全部的后台线程在应用程序退出时都会自动结束。 一个线程是前台线程仍是后台线程可由它的IsBackground属性来决定。这个属性是可读又可写的。它的默认值为false,即意味着一个线程默认为前台线程。咱们能够将它的IsBackground属性设置为true,从而使之成为一个后台线程。
后台线程又叫守护线程,它被CLR认为是程序执行中可作出牺牲的途径,即在任什么时候候均可能被忽略,所以,若是全部的前台线程终止,当应用程序域卸载时,全部的后台线程也会被自动终止。值得注意的是:前台线程和后台线程并不等同于主线程和工做线程,默认状况下,经过Thread.Start()方法建立的线程都自动成为前台线程。把线程的IsBackground属性设为 true就能够将线程配置为后台线程。url
托管线程或者是后台线程,或者是前台线程。 后台线程不会使托管执行环境处于运行状态,除此以外,后台线程与前台线程是同样的。 一旦全部前台线程在托管进程(其中 .exe 文件是托管程序集)中被中止,系统将中止全部后台线程并关闭。操作系统
3.子线程.net
默认状况,在新开启一个子线程的时候,他是前台线程,只有,将线程的IsBackground属性设为true;他才是后台线程
当子线程是前台线程,则主线程结束并不影响其余线程的执行,只有全部前台线程都结束,程序结束
当子线程是后台线程,则主线程的结束,会致使子线程的强迫结束
(我的理解,这样设计的缘由:由于后台线程通常作的都是须要花费大量时间的工做,若是不这样设计,主线程已经结束,然后台工做线程还在继续,第一有可能使程序陷入死循环,第二主线程已经结束,后台线程即时执行完成也已经没有什么实际的意义)线程
4.名词之间的关系总结设计
托管线程包括前台线程和后台线程orm
守护线程是后台线程htm
主线程是一个前台线程,前台线程能够是多个的blog
子线程是从属与主线程的,子线程能够是多个
5.DEMO:
public partial class Form1 : Form
{
public Form1()
{
j=1;
InitializeComponent();
}
static int j;
private void btnMultiThread_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart(MultiMethod));//子线程默认是前台线程
th.IsBackground = true;//将一个线程设置为后台线程,就能够保证前台线程关闭后,后台线程也会中止执行。
th.Start();
//this.lbCounter.Text = j.ToString();
}
private void MultiMethod()
{
for (int i = 0; i < 99999999; i++)
{
}
j=10000;//j是上下文中的变量,属于进程(static),因此是能够访问的。
//this.lbCounter.Text =j.ToString();//控件是属于UI线程(主线程,前台线程),直接跨线程是访问不了的。
MessageBox.Show("循环9999999次结束!");//MessageBox类是进程上下文环境中的资源,不属于Form1主线程(前台线程,UI线程)
this.Invoke(new Action(() => { lbCounter.Text = j.ToString(); }));//跨线程须要使用主线程的Invoke方法
}
private void btnSingle_Click(object sender, EventArgs e)
{
MultiMethod();//UI线程是同步,会等待很多时间。
}
private void btnCloseUI_Click(object sender, EventArgs e)
{
this.Close();//前台线程(UI线程,主线程)关闭,后台线程会中止执行
}
}
6.参考资料
http://msdn.microsoft.com/zh-cn/library/h339syd0
http://npfeng900.blog.163.com/blog/static/14456108201092431813416/
http://blog.sina.com.cn/s/blog_4b3485000100pigr.html
http://blog.csdn.net/jasonvip_c/article/details/5718636
http://baike.baidu.com/link?url=iHKpEFeXOm3-za_4Uq0RRUlhanBFw063O0UAMCRb6VcF_3xaU-x9kQ-tQcUdDBnn