WinForm 進度條的實現(非同步)

2022-03-22 14:18:32 字數 2046 閱讀 5653

在winform中經常遇到一些費時的操作介面,比如統計某個磁碟分割槽的資料夾或者檔案數目,如果分割槽很大或者檔案過多的話,處理不好就會造成「假死」的情況,或者報「執行緒間操作無效」的異常,為了解決這個問題,可以使用委託來處理,在.net2.0中還可以用backgroundworker類。

backgroundworker類是.net 2.0裡新增加的乙個類,對於需要長時間操作而不需要使用者長時間等待的情況可以使用這個類。

注意確保在 dowork 事件處理程式中不操作任何使用者介面物件。而應該過 progresschanged 和 runworkercompleted 事件與使用者介面進行通訊。

它有幾個屬性:

cancellationpending——指示應用程式是否已請求取消後台操作。

isbusy——指示 backgroundworker 是否正在執行非同步操作

workerreportsprogress——該值指示 backgroundworker 能否報告進度更新

workersupportscancellation——該值指示 backgroundworker 是否支援非同步取消

還有如下事件:

dowork——呼叫 runworkerasync 時發生。

progresschanged——呼叫 reportprogress 時發生。

runworkercompleted——當後台操作已完成、被取消或引發異常時發生。

還有如下方法:

cancelasync——請求取消掛起的後台操作

reportprogress——引發 progresschanged 事件

runworkerasync——開始執行後台操作

關於backgroundworker類更多詳細介紹可參考:

程式執行介面

主要**如下:

using

system;

using

system.collections.generic;

using

system.componentmodel;

using

system.data;

using

system.drawing;

using

system.linq;

using

system.text;

using

system.windows.forms;

namespace

processtest

//呼叫 runworkerasync 時發生

public

void

dowork(

object

sender, doworkeventargs e)

//呼叫 reportprogress 時發生

public

void

progesschanged(

object

sender, progresschangedeventargs e)

//當後台操作已完成、被取消或引發異常時發生

public

void

completework(

object

sender, runworkercompletedeventargs e)

private

intcomputefibonacci(

object

sender, doworkeventargs e)

else

system.threading.thread.sleep(

10);

}return-1

;}private

void

btnstart_click(

object

sender, eventargs e)

private

void

btnpause_click(

object

sender, eventargs e)}}

Winform中進度條

using system.threading 引入命名空間 thread thread null 其次宣告乙個執行緒物件 public delegate void delsetpro intpros 宣告乙個委託物件 設定進度條內容 漸變的值 private void setprocontent i...

進度條的實現

1 實現要求 的數量在不斷地增加,後面的數字也隨著增加,圖示不停地在旋轉 2 用到的基礎知識 n 換行 lf 將當前位置移到下一行開頭 r 回車 cr 將當前位置移到本行開頭,每次游標會回到行首 代表乙個反斜線字元 0 空字元 null 3 程式的實現 index裡面是圖示的實現,100s 是左端對...

進度條的實現

include include int main char ch printf 033 25l 033 47m printf 58s r fflush stdout int i 0 while i 50 printf 033 31m 033 58c ok 033 0m printf n 033 25...