深入淺析WinForm 進程、線程及區(qū)別介紹
一、進程
進程是一個具有獨立功能的程序關(guān)于某個數(shù)據(jù)集合的一次運行活動。
它可以申請和擁有系統(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 = "應(yīng)用程序|*.exe";
//顯示對話框并且判斷用戶有沒有選中文件
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
//取文件路徑
string path = openFileDialog1.FileName;
//創(chuàng)建一個新的進程
Process p = new Process();
//制造進程的啟動信息
ProcessStartInfo psf = new ProcessStartInfo(path);
//設(shè)置該進程的執(zhí)行信息
p.StartInfo = psf;
//啟動進程
p.Start();
}
}
例子:注銷
//這個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;
//造一個進程
Process p = new Process();
//造一個進程的啟動信息
ProcessStartInfo ps = new ProcessStartInfo(path);
//設(shè)置進程啟動信息
p.StartInfo = ps;
//啟動進程
p.Start();
//關(guān)閉程序
this.Close();
}
例:窗口實現(xiàn)鼠標拖動
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)
{
//邊距=當(dāng)前的距離+移動的距離
this.Left = this.Left+(e.X - x);
this.Top = this.Top +(e.Y - y);
}
}
二、線程
線程,有時被稱為輕量級進程(Lightweight Process,LWP),是程序執(zhí)行流的最小單元。
區(qū)別:進程有自己獨立的資源,線程共用資源。
Thread類, 命名空間:using System.Threading ;
程序默認只有一個主線程,如果做復(fù)雜處理,則會出現(xiàn)假死狀態(tài),因為一條線程同時只能做一件事。
多線程的作用:同時做多件事情,節(jié)約時間,后臺運行程序,提高程序的運行效率,也不會使主界面出現(xiàn)無響應(yīng)的情況。
創(chuàng)建線程:
開啟新的線程執(zhí)行哪個函數(shù)
Thread th = new Thread( 里面寫線程要操作的方法,方法名不含括號 );
標記這個線程準備就緒了,可以隨時執(zhí)行,CPU決定執(zhí)行時間
th.Start();
線程分為兩種:
前臺線程 - 只有所有的前臺線程都關(guān)閉才能完成程序關(guān)閉。
后臺線程 - 只要所有的前臺線程都結(jié)束,后臺線程則會自動結(jié)束。
兩者的區(qū)別:應(yīng)用程序必須運行完所有的前臺線程才可以退出;
而對于后臺線程,應(yīng)用程序則可以不考慮其是否已經(jīng)運行完畢而直接退出,所有的后臺線程在應(yīng)用程序退出時都會自動
結(jié)束。
設(shè)置th線程為后臺線程
th . IsBackground = true ;
控件由主線程創(chuàng)建,新線程想要訪問主線程資源,程序默認是不允許跨線程訪問的。
取消跨線程訪問限制
在界面Load事件里
Control.CheckForIllegalCrossThreadCalls = false;
FormClosing 事件中:
//判斷新線程是否為null,如果為null,那就自動關(guān)閉了
if(th != null)
{
//立即結(jié)束線程,但是結(jié)束后就不能再被重新Start了
th.Abort();
}
執(zhí)行帶參數(shù)的函數(shù):
如果線程執(zhí)行的方法需要參數(shù),那么要求這個參數(shù)必須是object類型!
Thread th = new Thread(Test); //參數(shù)名不需要帶括號
th . IsBackground = true;
th.Start("123"); //在這里傳入Test函數(shù)所需要的參數(shù)
這樣函數(shù)中就需要強轉(zhuǎn):
private void Test (object s)
{
string ss = (string) s ;
......
}
以上所述是小編給大家介紹的WinForm 進程、線程及區(qū)別介紹,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
vs2012創(chuàng)建的ado.net模型無法實例化的解決方案
本文給大家分享的是升級vs2012后,發(fā)現(xiàn)創(chuàng)建數(shù)據(jù)模型無法實例化使用,嘗試了很多種方法,最后在度娘的幫助下,才解決了這個問題,這里記錄下來,分享給大家。2015-03-03
VS2010發(fā)布Web網(wǎng)站技術(shù)攻略
本篇文章主要包含了完整的發(fā)布網(wǎng)站步驟、發(fā)布網(wǎng)站過程中可能遇到的問題,以及配套的解決方法,相信感興趣的朋友一定會喜歡這篇文章的2015-07-07
asp.net網(wǎng)站實現(xiàn)接入QQ登錄示例代碼
相信大家在做開發(fā)的時候,常會遇到集成QQ登錄的功能,本文主要說的是利用asp.net代碼的實現(xiàn)方式,邏輯部分主要還是根據(jù)幫助文檔來的。不懂的同學(xué)可以先看看文檔。下面來一起學(xué)習(xí)學(xué)習(xí)。2016-08-08
如何使用 .NET 創(chuàng)建新的 WPF 應(yīng)用
本文介紹了如何使用.NET創(chuàng)建新的WPF應(yīng)用,并向窗口添加控件,通過處理控件事件,可以為應(yīng)用提供功能,感興趣的朋友跟隨小編一起看看吧2024-11-11
IIS上部署Asp.net core Webapi的實現(xiàn)步驟
ASP.NET Core Web API是構(gòu)建RESTful應(yīng)用程序的理想平臺,本文主要介紹了IIS上部署Asp.net core Webapi的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下2024-07-07
Asp.net在頁面間傳遞大量數(shù)據(jù)(數(shù)據(jù)表)建議采用的方法
能讓數(shù)據(jù)在 兩個不同站點之間傳遞嗎,針對這個問題將會展開本文的探討有想在A站點的數(shù)據(jù)傳遞到B站點的朋友們可以適當(dāng)參考下,或許本文對你有所幫助2013-02-02
asp.net中DBNull.Value,null,String.Empty區(qū)別淺析
這篇文章來給大家介紹asp.net中DBNull.Value,null,String.Empty區(qū)別淺析,有需要的同學(xué)可以參考一下2013-08-08

