<>
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace 進程Process { ////// Process類是一個非靜態類。它裡面包含靜態成員和非靜態成員。靜態成員有類直接調用,非靜態成員有類的對象來調用 /// class Program { static void Main(string[] args) { //每一個用戶程序都是一個進程。在.net中操作進程的這個類叫做Process Process[] pros = Process.GetProcesses(); //獲取當前計算機中正在運行的所有進程。存放到一個進程數組中(Process[] pros) foreach (var item in pros) { //item.Kill();//立即停止當前進程。即:殺死當前進程。這個不能亂用啊。寫在這個循環裡面,就殺掉了所有正在運行的進程了,MD用了一次給我電腦都關閉了,太危險了。 Console.WriteLine(item); //將每一個進程輸出到控制台。 } //通過進程來打開一些應用程序 //通過指定文檔或應用程序文件的名稱來啟動進程資源:參數是:要在進程中運行的文檔或應用程序文件的名稱。 Process.Start("calc"); //打開計算器 Process.Start("mspaint"); //打開繪圖工具 Process.Start("iexplore","Http://www.baidu.com"); //打開浏覽器,打開百度 //通過進程來打開一些文件 Process p = new Process(); //並指定啟動進程時使用的諸如應用程序或文檔的文件名。 ProcessStartInfo psi = new ProcessStartInfo(@"C:\Program Files (x86)\Tencent\QQ\QQProtect\Bin\QQProtect.exe"); //StartInfo:它表示啟動該進程時要使用的數據 p.StartInfo=psi; p.Start(); //啟動進程 } } }
線程
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace Thread線程 { ////// 當一個程序啟動時,就有一個進程被操作系統(OS)創建,與此同時一個線程也立刻運行,該線程通常叫做程序的主線程(Main /// Thread),因為它是程序開始時就執行的,如果你需要再創建線程,那麼創建的線程就是這個主線程的子線程。 /// /// 一個進程是由多個線程組成的。線程分為兩種,一種叫前台線程。另一種叫後台線程。 /// 前台線程:應用程序必須運行完所有的前台線程才可以退出;(主線程就是屬於前台線程) /// 後台線程:而對於後台線程,應用程序則可以不考慮其是否已經運行完畢而直接退出,所有的後台線程在應用程序退出時都會自動結束。 /// /// class Program { public static void Test() { for (int i = 0; i < 100; i++) { Console.WriteLine(i); } Console.ReadKey(); } //單線程的也就是程序執行時,所跑的程序路徑(處理的東西)是連續順序下來的,必須前面的處理好,後面的才會執行到。(這樣容易發生“假死”等問題。例如:一個前台線程沒有執行完畢,程序怎麼都無法退出,卡在那裡不動,造成假死,非要等前台線程都執行完畢了,才能退出程序。又例如:一個控制台程序,程序一開始便啟動了10個線程,每個線程運行5秒鐘時間。由於線程的IsBackground屬性默認為false,即它們都是前台線程,所以盡管程序的主線程很快就運行結束了,但程序要到所有已啟動的線程都運行完畢才會結束) //而多線程的目的就是讓計算機“同時”做多件事,節約時間。多線程是一種提高程序運行效率和性能的常用技術 static void Main(string[] args) { Console.WriteLine("我現在還不想吃飯"); //主線程完成輸出。--這是主線程干的事 //創建一個線程。讓這個線程去執行Test()這個方法。(注意Test這個方法不要括號) //默認情況下我們創建的這個線程叫“前台線程”。我們也可以將他設為“後台線程” Thread th = new Thread(Test); //--這是th這個線程干的事 th.IsBackground = true;//將剛剛創建的th這個線程設為“後台線程” th.Start();//標記這個線程准備就緒了,可以隨時被CPU執行(線程什麼時候去執行有CPU決定,我們是不能手動的去調用線程的,我們能做的就是告訴CPU,這個線程已經准備好了,你可以隨時執行它。如果此時CPU很忙的話它依然執行不了這個線程,如果不忙的話就可能馬上來執行這個線程) Console.WriteLine("我要吃飯"); //主線程完成輸出 --這是主線程干的事 for (int i = 101; i < 200; i++) { Console.WriteLine(i); //主線程完成輸出 --這是主線程干的事 } //在.net下是不允許跨線程訪問的。解決跨線程訪問的方法是:Control.CheckForIllegalCrossThreadCalls = false; //這個CheckForIllegalCrossThreadCalls屬性指示是否捕獲對錯誤線程的調用,如果false 就表示不檢查對錯誤線程的調用。如果是true就表示檢查對錯誤線程的調用。【這個Control類是:WinForm中所有控件的基類】 Thread.Sleep(3000);//讓當前線程停止3秒後再運行。 Console.WriteLine("Hellow world"); } } }