国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

深入淺析WinForm 進(jìn)程、線程及區(qū)別介紹

2024-07-10 12:54:44
字體:
供稿:網(wǎng)友

進(jìn)程是程序集合的運(yùn)行活動,它具有獨(dú)立函數(shù),然而線程,有時(shí)稱為輕量級進(jìn)程,是程序執(zhí)行流的其中之一,以下就讓錯(cuò)新技術(shù)頻道小編來為大家介紹深入淺析WinForm 進(jìn)程、線程及區(qū)別介紹。

一、進(jìn)程

命名空間:using System.Diagnostics;

Process.Start("calc");   //打開計(jì)算器Process.Start("mspaint");   //打開畫圖Process.Start("iexplore" , "http://www.baidu.com");  //打開瀏覽器并指定地址

(一)通過一個(gè)進(jìn)程,打開指定的文件:

1.創(chuàng)建進(jìn)程對象

Process p = new Process();

2.創(chuàng)建一個(gè)StartInfo對象,是指定帶盤符的路徑。

ProcessStartInfo psi = new ProcessStartInfo(@"C:/user/.....);

3.進(jìn)程指定及開始

p.StartInfo = psi; //指定路徑p.Start(); //開始進(jìn)程

(二)通過文件選擇框讓用戶自己選擇所需要打開的程序并打開:

private void button1_Click(object sender, EventArgs e){//這是選擇文件的類型openFileDialog1.Filter = "應(yīng)用程序|*.exe";//顯示對話框并且判斷用戶有沒有選中文件if (openFileDialog1.ShowDialog() == DialogResult.OK){//取文件路徑string path = openFileDialog1.FileName;//創(chuàng)建一個(gè)新的進(jìn)程Process p = new Process();//制造進(jìn)程的啟動信息ProcessStartInfo psf = new ProcessStartInfo(path);//設(shè)置該進(jìn)程的執(zhí)行信息p.StartInfo = psf;//啟動進(jìn)程p.Start();} } 

例子:注銷

//這個(gè)path就是你要調(diào)用的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;//造一個(gè)進(jìn)程Process p = new Process();//造一個(gè)進(jìn)程的啟動信息ProcessStartInfo ps = new ProcessStartInfo(path);//設(shè)置進(jìn)程啟動信息p.StartInfo = ps;//啟動進(jìn)程p.Start();//關(guān)閉程序this.Close();} 

例:窗口實(shí)現(xiàn)鼠標(biāo)拖動

private int x;private int y;private void pictureBox1_MouseDown(object sender, MouseEventArgs e){//鼠標(biāo)點(diǎn)擊時(shí)的XY坐標(biāo)x = e.X;y = e.Y;}private void pictureBox1_MouseMove(object sender, MouseEventArgs e){//判斷鼠標(biāo)按下的是左鍵if (e.Button == System.Windows.Forms.MouseButtons.Left){//邊距=當(dāng)前的距離+移動的距離this.Left = this.Left+(e.X - x);this.Top = this.Top +(e.Y - y);}} 

二、線程

線程,有時(shí)被稱為輕量級進(jìn)程(Lightweight Process,LWP),是程序執(zhí)行流的最小單元。

區(qū)別:進(jìn)程有自己獨(dú)立的資源,線程共用資源。

Thread類, 命名空間:using System.Threading ;

程序默認(rèn)只有一個(gè)主線程,如果做復(fù)雜處理,則會出現(xiàn)假死狀態(tài),因?yàn)橐粭l線程同時(shí)只能做一件事。

多線程的作用:同時(shí)做多件事情,節(jié)約時(shí)間,后臺運(yùn)行程序,提高程序的運(yùn)行效率,也不會使主界面出現(xiàn)無響應(yīng)的情況。

創(chuàng)建線程:

開啟新的線程執(zhí)行哪個(gè)函數(shù) 

Thread th = new Thread( 里面寫線程要操作的方法,方法名不含括號 ); 

標(biāo)記這個(gè)線程準(zhǔn)備就緒了,可以隨時(shí)執(zhí)行,CPU決定執(zhí)行時(shí)間

  th.Start();

線程分為兩種:

前臺線程 - 只有所有的前臺線程都關(guān)閉才能完成程序關(guān)閉。

后臺線程 - 只要所有的前臺線程都結(jié)束,后臺線程則會自動結(jié)束。

兩者的區(qū)別:應(yīng)用程序必須運(yùn)行完所有的前臺線程才可以退出;

     而對于后臺線程,應(yīng)用程序則可以不考慮其是否已經(jīng)運(yùn)行完畢而直接退出,所有的后臺線程在應(yīng)用程序退出時(shí)都會自動

結(jié)束。

設(shè)置th線程為后臺線程 

th . IsBackground = true ;

控件由主線程創(chuàng)建,新線程想要訪問主線程資源,程序默認(rèn)是不允許跨線程訪問的。

取消跨線程訪問限制

在界面Load事件里

  Control.CheckForIllegalCrossThreadCalls = false;

FormClosing 事件中:

 //判斷新線程是否為null,如果為null,那就自動關(guān)閉了  if(th != null)  {    //立即結(jié)束線程,但是結(jié)束后就不能再被重新Start了    th.Abort();   }

執(zhí)行帶參數(shù)的函數(shù):

如果線程執(zhí)行的方法需要參數(shù),那么要求這個(gè)參數(shù)必須是object類型!

Thread th = new Thread(Test); //參數(shù)名不需要帶括號  th . IsBackground = true;  th.Start("123");         //在這里傳入Test函數(shù)所需要的參數(shù)

這樣函數(shù)中就需要強(qiáng)轉(zhuǎn):

 private void Test (object s)  {    string ss = (string) s ;    ......  }

以上就是錯(cuò)新技術(shù)頻道小編帶給大家的深入淺析WinForm 進(jìn)程、線程及區(qū)別介紹,感謝大家的閱讀,如果覺得這篇文章對你有幫助的話,可以分享給大家哦。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 漳平市| 固安县| 特克斯县| 莱州市| 越西县| 綦江县| 台州市| 颍上县| 扶余县| 甘孜| 六安市| 黎川县| 浦江县| 嘉善县| 祁阳县| 拉萨市| 正镶白旗| 榆社县| 台安县| 聂荣县| 托克托县| 安新县| 资源县| 龙泉市| 康马县| 门源| 库伦旗| 江源县| 顺平县| 文成县| 太康县| 正安县| 红河县| 古浪县| 彰化市| 宁夏| 收藏| 洛扎县| 磴口县| 永丰县| 日喀则市|