<>
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");
}
}
}