C#:前台线程后台线程
1.線程分類
線程由程序員創建,可是創建的方式不同,總體來說有兩種,一種是個人構造,也就是使用thread類new線程對象創建,這一類線程是大部分程序員知道的,也叫專用線程;還有一種是由CLR創建,這一類線程主要存在于線程池中,也叫線程池線程。對于這兩種線程的好壞,個人建議最好使用線程池線程,不要大量使用專用線程,對于這一個問題的探討,讀者可以做研究,本文不做討論。
前臺線程和后臺線程
而從回收的角度來看又可分為前臺線程和后臺線程
后臺線程:后臺線程是可以隨時被CLR關閉而不引發異常的,也就是說當后臺線程被關閉時,資源的回收是立即的,不等待的,也不考慮后臺線程是否執行完成,就算是正在執行中也立即被終止。【后臺,存在于黑暗之中默默無聞,它的消亡和存在,別人也感受不到】
前臺線程:前臺線程是不會被立即關閉的,它的關閉只會發生在自己執行完成時,不受外在因素的影響。假如應用程序退出,造成它的前臺線程終止,此時CLR仍然保持活動并運行,使應用程序能繼續運行,當它的的前臺線程都終止后,整個進程才會被銷毀。
所以應該使用前臺線程執行確實想完成的任務,比如數據的拷貝等等.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.IO;class class1 {static void Main(string[] args){Thread tmpThread = new Thread(WriteFile);//默認為前臺線程tmpThread.Name = "TestThread";//tmpThread.IsBackground = true;tmpThread.Start();//Console.ReadKey();}/// <summary>/// 寫文件/// </summary>static void WriteFile(){while (true){using (FileStream fs = File.Open(@"D:\test.txt", FileMode.Append, FileAccess.Write, FileShare.ReadWrite)){byte[] buff = System.Text.UnicodeEncoding.UTF8.GetBytes(string.Format("Time:{0}\r\n", DateTime.Now.ToString()));fs.Write(buff, 0, buff.Length);}Thread.Sleep(10);}} }在上面的程序中我們使用了一個線程默認為前臺線程,當控制臺程序的Main函數執行完時,前臺線程任然在寫文件,如下如:
2.說明
(1)在任何時候我們都可以通過線程的IsBackground屬性改變線程的前后臺屬性
(2)應用程序的主線程以及使用Thread構造的線程都默認為前臺線程
? ? 線程池線程也就是使用?ThreadPool.QueueUserWorkItem()和Task工廠創建的線程都默認為后臺線程
https://www.cnblogs.com/Matcha/p/5334022.html
總結
以上是生活随笔為你收集整理的C#:前台线程后台线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 暴露年龄的小零食都有哪些
- 下一篇: 贵州酒席多少菜?