WinForm中進程與線程的區(qū)別是什么-創(chuàng)新互聯(lián)

本篇文章為大家展示了WinForm中進程與線程的區(qū)別是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

在渭南等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都做網站、網站制作 網站設計制作定制制作,公司網站建設,企業(yè)網站建設,成都品牌網站建設,營銷型網站,成都外貿網站建設,渭南網站建設費用合理。

一、進程


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


它可以申請和擁有系統(tǒng)資源,是一個動態(tài)的概念,是一個活動的實體。


Process 類,用來操作進程。

命名空間:using System.Diagnostics;


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

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


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

Process p = new Process();

2.創(chuàng)建一個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;
//創(chuàng)建一個新的進程
Process p = new Process();
//制造進程的啟動信息
ProcessStartInfo psf = new ProcessStartInfo(path);
//設置該進程的執(zhí)行信息
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),是程序執(zhí)行流的最小單元。


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


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

程序默認只有一個主線程,如果做復雜處理,則會出現假死狀態(tài),因為一條線程同時只能做一件事。


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


創(chuàng)建線程:


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

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

標記這個線程準備就緒了,可以隨時執(zhí)行,CPU決定執(zhí)行時間


th.Start();

線程分為兩種:


前臺線程 - 只有所有的前臺線程都關閉才能完成程序關閉。


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


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


   而對于后臺線程,應用程序則可以不考慮其是否已經運行完畢而直接退出,所有的后臺線程在應用程序退出時都會自動

結束。


設置th線程為后臺線程 

th . IsBackground = true ;

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


取消跨線程訪問限制

在界面Load事件里


Control.CheckForIllegalCrossThreadCalls = false;


FormClosing 事件中:


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

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


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


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

這樣函數中就需要強轉:

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

上述內容就是WinForm中進程與線程的區(qū)別是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文名稱:WinForm中進程與線程的區(qū)別是什么-創(chuàng)新互聯(lián)
標題路徑:http://www.muchs.cn/article20/dhcejo.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供面包屑導航、虛擬主機、網站設計公司、網站設計、網站制作云服務器

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

手機網站建設