1、進程瀏覽器
進程是一個具備獨立功能的程序關於某個數據集合的一次運行活動。多線程
它能夠申請和擁有系統資源,是一個動態的概念,是一個活動的實體。函數
Process 類,用來操做進程。this
命名空間:using System.Diagnostics;spa
Process.Start("calc"); //打開計算器
Process.Start("mspaint"); //打開畫圖
Process.Start("iexplore" , "http://www.baidu.com"); //打開瀏覽器並指定地址線程
(一)經過一個進程,打開指定的文件:code
1.建立進程對象
Process p = new Process();orm
2.建立一個StartInfo對象,是指定帶盤符的路徑。
ProcessStartInfo psi = new ProcessStartInfo(@"C:\user\.....);對象
3.進程指定及開始
p.StartInfo = psi; //指定路徑
p.Start(); //開始進程blog
(二)經過文件選擇框讓用戶本身選擇所須要打開的程序並打開:
private void button1_Click(object sender, EventArgs e) { //這是選擇文件的類型 openFileDialog1.Filter = "應用程序|*.exe"; //顯示對話框而且判斷用戶有沒有選中文件 if (openFileDialog1.ShowDialog() == DialogResult.OK) { //取文件路徑 string path = openFileDialog1.FileName; //建立一個新的進程 Process p = new Process(); //製造進程的啓動信息 ProcessStartInfo psf = new ProcessStartInfo(path); //設置該進程的執行信息 p.StartInfo = psf; //啓動進程 p.Start(); } }
例子:註銷
//這個path就是你要調用的exe程序的絕對路徑
string path = Application.StartupPath;
//獲取自身exe或dll的文件名路徑
string s = System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName;
private void button2_Click(object sender, EventArgs e) { //打開該程序 //取該程序文件的路徑 //string path = Application.StartupPath; string path = System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName; //造一個進程 Process p = new Process(); //造一個進程的啓動信息 ProcessStartInfo ps = new ProcessStartInfo(path); //設置進程啓動信息 p.StartInfo = ps; //啓動進程 p.Start(); //關閉程序 this.Close(); }
例:窗口實現鼠標拖動
private int x; private int y; private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { //鼠標點擊時的XY座標 x = e.X; y = e.Y; } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { //判斷鼠標按下的是左鍵 if (e.Button == System.Windows.Forms.MouseButtons.Left) { //邊距=當前的距離+移動的距離 this.Left = this.Left+(e.X - x); this.Top = this.Top +(e.Y - y); } }
2、線程
線程,有時被稱爲輕量級進程(Lightweight Process,LWP),是程序執行流的最小單元。
區別:進程有本身獨立的資源,線程共用資源。
Thread類, 命名空間:using System.Threading ;
程序默認只有一個主線程,若是作複雜處理,則會出現假死狀態,由於一條線程同時只能作一件事。
多線程的做用:同時作多件事情,節約時間,後臺運行程序,提升程序的運行效率,也不會使主界面出現無響應的狀況。
建立線程:
開啓新的線程執行哪一個函數
Thread th = new Thread( 裏面寫線程要操做的方法,方法名不含括號 );
標記這個線程準備就緒了,能夠隨時執行,CPU決定執行時間
th.Start();
線程分爲兩種:
前臺線程 - 只有全部的前臺線程都關閉才能完成程序關閉。
後臺線程 - 只要全部的前臺線程都結束,後臺線程則會自動結束。
二者的區別:應用程序必須運行完全部的前臺線程才能夠退出;
而對於後臺線程,應用程序則能夠不考慮其是否已經運行完畢而直接退出,全部的後臺線程在應用程序退出時都會自動結束。
設置th線程爲後臺線程
th . IsBackground = true ;
控件由主線程建立,新線程想要訪問主線程資源,程序默認是不容許跨線程訪問的。
取消跨線程訪問限制
在界面Load事件裏
Control.CheckForIllegalCrossThreadCalls = false;
FormClosing 事件中:
//判斷新線程是否爲null,若是爲null,那就自動關閉了
if(th != null)
{
//當即結束線程,可是結束後就不能再被從新Start了
th.Abort();
}
執行帶參數的函數:
若是線程執行的方法須要參數,那麼要求這個參數必須是object類型!
Thread th = new Thread(Test); //參數名不須要帶括號
th . IsBackground = true;
th.Start("123"); //在這裏傳入Test函數所須要的參數
這樣函數中就須要強轉:
private void Test (object s)
{
string ss = (string) s ;
......
}