WinForm 程序和執行緒

2022-08-18 06:15:08 字數 1550 閱讀 4250

程序:

//程序用到的類process,需要進行解析 using system.diagnostics

process.start("calc");//process是非靜態方法,括號裡面是要開啟的程序的名字

(靜態方法與非靜態方法區別:靜態方法不用例項化物件,直接可以點出裡面的方法)

弊端:有許多程式不知道它的執行名字到底是什麼,如果寫錯了,就會出現程式崩潰錯誤

乙個比較好用的開啟程序的辦法:

//

例項化程序類

process p = new

process();

//建立程序開啟路徑物件

processstartinfo psi = new

processstartinfo(textbox1.text);

//程序類開啟路徑指向

p.startinfo =psi;

//啟動程序,不是立刻開啟,什麼時候開啟時由cpu決定

p.start();

程式為什麼會假死?因為主線程被占用了

執行緒去執行一段需要時間的**,主線程不會被占用,程式就不會出現假死狀態了

建立執行緒的方法:

//

建立執行緒類,並使用委託,指定這個執行緒要執行的是哪個函式

thread th = new

thread(aaa);

//開啟執行緒執行功能,也不是立刻執行

th.start();

在運用執行緒的過程中遇到的兩個常見問題及其解決辦法如下:

問題一:

執行緒可以開啟很多個,如果使用者可以無限點選按鈕,那麼有可能會造成電腦cpu使用率過高

用執行緒執行方法,只能傳乙個引數,並且此引數必須是object型別

程式預設不允許跨執行緒訪問物件

關閉監控就可以了

怎麼關?

在建構函式中,例項化方法下面加上這句話:

control.checkforillegalcrossthreadcalls = false;

問題二:

預設主窗體已經關閉,但是執行緒如果還未執行完工作內容,那麼會默默的繼續執行,直到執行完畢後才會將整個程序關閉

程式預設所有的執行緒都為:前台執行緒

解決辦法:將新開的執行緒變為後台執行緒

th.isbackground = true;

總結:執行緒所在的命名空間:system.threading;

執行緒類:thread th = new thread(方法名);

//沒有不要引數的建構函式,常用的為,1個引數,引數型別是委託型別,需要乙個方法指向,變為後台執行緒:

th.isbackground = true;

執行緒啟動:

th.start();

如果要執行帶引數的方法,那麼這個方法的引數必須是object型別,引數傳遞的位置在start方法的括號中

允許跨執行緒訪問物件:

在建構函式的構造方法下面加上:

control.checkforillegalcrossthreadcalls = false;

停止執行緒:

th.abort();

WinForm 程序和執行緒

一 程序 程序是乙個具有獨立功能的程式關於某個資料集合的一次執行活動。它可以申請和擁有系統資源,是乙個動態的概念,是乙個活動的實體。process 類,用來操作程序。命名空間 using system.diagnostics process.start calc 開啟計算器 process.star...

winform(程序和執行緒)

一 程序 需要有用process類 用法一 process.start calc 不好用 該方法弊端 有許多程式不知道它的執行名字到底是什麼,如果寫錯了,就會出現程式崩潰錯誤 用法二 例項化程序類 process p new process 建立程序開啟路徑物件 processstartinfo p...

WinForm 程序,執行緒

一 程序 程序是乙個具有獨立功能的程式關於某個資料集合的一次執行活動。它可以申請和擁有系統資源,是乙個動態的概念,是乙個活動的實體。process 類,用來操作程序。命名空間 using system.diagnostics process.start calc 開啟計算器 process.star...