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

首頁 > 編程 > .NET > 正文

深入淺析WinForm 進程、線程及區別介紹

2024-07-10 13:31:20
字體:
來源:轉載
供稿:網友

一、進程

進程是一個具有獨立功能的程序關于某個數據集合的一次運行活動。

它可以申請和擁有系統資源,是一個動態的概念,是一個活動的實體。

Process 類,用來操作進程。

命名空間:using System.Diagnostics;

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

(一)通過一個進程,打開指定的文件:

1.創建進程對象

Process p = new Process();

2.創建一個StartInfo對象,是指定帶盤符的路徑。

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

3.進程指定及開始

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

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

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

二、線程

線程,有時被稱為輕量級進程(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 ;    ......  }

以上所述是小編給大家介紹的WinForm 進程、線程及區別介紹,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江陵县| 扶余县| 安达市| 兴宁市| 惠安县| 贵州省| 潢川县| 读书| 栾川县| 灵丘县| 德惠市| 义马市| 增城市| 娄底市| 康平县| 赫章县| 梅州市| 永和县| 江门市| 临潭县| 庆元县| 元阳县| 卢氏县| 潜江市| 堆龙德庆县| 大同市| 丽水市| 拜泉县| 邳州市| 昆山市| 江达县| 高安市| 溧水县| 浪卡子县| 清丰县| 定结县| 田东县| 政和县| 鸡东县| 乌审旗| 辽阳县|