c 委託實現多執行緒的例項

2021-08-27 03:27:10 字數 3352 閱讀 8980

前面學習了委託,事件和多執行緒相關的知識。今天我們就通過在專案中常見的例項來加深對多執行緒的應用。

在winform應用程式中,經常用進度條顯示進度資訊。這時候就可能用到多執行緒。如果不採用多執行緒控制進度條的話,視窗介面很容易假死(無法看到進度資訊,看起來像介面卡住了)。

在這個例項中,我們建立乙個窗體,窗體中包括乙個後台元件,乙個進度條控制項。當在主窗體中按「開始」按鈕時,進度條開始顯示進度。

該例項中用backgroundworker元件,表示後台工作。通過後台工作元件實現進度條。

主窗體:

進度條窗體:

進度條窗體的**如下:

public

partial

class processform : form

////// 當輔助線程完成時引發

//////

///private

void

backgroundworker1_runworkercompleted(object sender, runworkercompletedeventargs e)

private

void

backgroundworker1_processchanged(object sender, progresschangedeventargs e)

private

void

button1_click(object sender, eventargs e)

}

主窗體**如下:

public

partial

class form1 : form

private

void

btnbegin_click(object sender, eventargs e)

////// 當輔助線程完成時引發

//////

///private

void

backgroundworker1_runworkercompleted(object sender, runworkercompletedeventargs e)

}///

/// 操作開始時在另乙個執行緒上執行的事件處理程式

//////

///private

void

backgroundworker1_dowork(object sender, doworkeventargs e)}}

}

執行結果:

該例是通過後台程式元件完成對進度條的展示。

也可以在主窗體中通過後台元件完成進度條的顯示,窗體設計如下:

**如下:

public

partial

class form1 : form

private

void

btnbegin_click(object sender, eventargs e)

////// 當輔助線程完成時引發

//////

///private

void

backgroundworker1_runworkercompleted(object sender, runworkercompletedeventargs e)

gc.collect();

}///

/// 操作開始時在另乙個執行緒上執行的事件處理程式

//////

///private

void

backgroundworker1_dowork(object sender, doworkeventargs e)

));if(worker.cancellationpending)

}begininvoke(new action(() =>

));}

////// 取消

//////

///private

void

button1_click(object sender, eventargs e)

private

void

backgroundworker1_progresschanged(object sender, progresschangedeventargs e)

}

執行結果如下:

功能說明:有時候在處理大量資料的時候,有時候方法的執行需要一定的時間,這時候往往會造成頁面或程式的假死狀態,對於使用者的體驗度也很不好。為了避免這種情況的發生,我們可以加乙個進度條和乙個文字框。來顯示程式處理的進度。

public

partial

class form1 : form

private

void

btnbegin_click(object sender, eventargs e)

////// 當輔助線程完成時引發

//////

///private

void

backgroundworker1_runworkercompleted(object sender, runworkercompletedeventargs e)

gc.collect();

}///

/// 操作開始時在另乙個執行緒上執行的事件處理程式

//////

///private

void

backgroundworker1_dowork(object sender, doworkeventargs e)}}

////// 取消

//////

///private

void

button1_click(object sender, eventargs e)

private

void

backgroundworker1_progresschanged(object sender, progresschangedeventargs e)

}

c 委託與多執行緒

很多時候寫windows程式都需要結合多執行緒,在.net中用如下得 來建立並啟動乙個新的執行緒。public void threadproc thread thread new thread new threadstart threadproc thread.isbackground true t...

C 多執行緒 與 委託

簡單的多執行緒 protected void page load object sender,eventargs e private void mymethod object o 使用委託的多執行緒 public partial class demo form 定義委託 delegate void ...

多執行緒 委託的使用

新建乙個執行緒 無引數,無返回值 thread th newthread printname th.isbackground true 後台執行 th.start public void printname 函式 也可使用這樣的方法 thread th newthread new threadsta...