在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...