使用BackgroundWorker元件

2022-09-15 10:24:13 字數 2776 閱讀 3257

在應用程式中新增乙個backgroundworker例項,如果用的是vs,可以從工具上直接拖到應用程式:

backgroundworker backgroundworker1 = new backgroundworker();

為了開始在後台操作,必須呼叫backgroundworker的runworkerasync()方法,當呼叫此方時,backgroundworker 通過觸發dowork 事件,開始執行後台操作,dowork 事件的**是在另乙個執行緒裡執行的。**如下:

**一:

backgroundworker backgroundworker1 = new

backgroundworker();

//在另乙個執行緒裡開始操作(btnstart是乙個按鈕控制項)

//也可以利用runwokerasync()方法傳遞引數,

private

void btnstart_click(object

sender, eventargs e)

//dowork事件在另乙個執行緒裡執行

private

void

backgroundworker1_dowork(objectsender,doworkeventargs e)

為了顯示後台操作的執行進度,首先要使workerreportsprogress 等於true,

然後呼叫backgroundworker的reportprogress()方法,通過它傳遞操作完成的進度值,此外,該方法觸發progresschanged事件,在是此事件中,通過progresschangedeventargs的例項,接收到主線程傳遞過來的引數。

**二:

backgroundworker backgroundworker1 = new

backgroundworker();

backgroundworker1.workerreportsprogress = true

;

private

void btnstart_click(object

sender, eventargs e)

private

void backgroundworker1_dowork(object

sender, doworkeventargs e)

}private

void backgroundworker1_progresschanged(object

sender, progresschangedeventargs e)

為了使 backgroundworker 可以取消後台正在執行的操作,首先要把屬性workersupportscancellation 的值設定為 true。接著呼叫cancelasync()方法,該方法使得屬性cancellationpending 為true,利用cancellationpending 屬性,可以判斷是否取消後台非同步操作。

**三:

backgroundworker backgroundworker1 = new

backgroundworker();

backgroundworker1.workerreportsprogress = true

; backgroundworker1.workersupportscancellation = true

;

private

void btnstart_click(object

sender, eventargs e)

private

void btncancel_click(object

sender, eventargs e)

private

void backgroundworker1_dowork(object

sender, doworkeventargs e)}}

private

void backgroundworker1_progresschanged(object

sender, progresschangedeventargs e)

當後台操作完成以後,無論是completed 還是cancelled,則runworkercompleted 事件被觸發,通過此方法可以將後台操作的完成結果反饋給使用者;

另外,通過runworkercompletedeventargs例項的cancelled 屬性,以判斷是否是cancel操作使得後台操作終止;

**片段:

private

void backgroundworker1_runworkercompleted(object

sender, runworkercompletedeventargs e)

else

}

在執行dowork 事件時,doworkeventargs 例項的result 屬性,返回值到使用者;在runworkercompleted 事件裡,runworkercompletedeventargs 例項的result 屬性接收值;

**片段:

private

void backgroundworker1_dowork(object

sender, doworkeventargs e)

private

void backgroundworker1_runworkercompleted(object

sender, runworkercompletedeventargs e)

PDA開發系列 BackgroundWorker

摘要 在.net compact framework中,沒有backgroundworker,應該會讓我們這些用慣了backgroundworker的人感到非常的不便。backgroundworker可以非常方便解決執行緒和控制項之間的互操作問題,做出介面執行非常流暢的引用程式。該元件因wince的...

使用GraphEdit使用

1 註冊元件。其實乙個filter就是乙個com元件,所以使用之前需要註冊,可以有兩種方法對元件進行註冊。1.直接使用命令。命令列下輸入 regsvr32 hqtlystd.ax 編譯之後你會在工程目錄下的debug中找到hqtlystd.ax,這個就是要用的filter 即可註冊成功。2.vc6....

MySQL使用學習使用 mysql學習使用

1 mysql學習 1 安裝 ubuntu下直接安裝 apt get install mysql server 2 檢查伺服器是否啟動 sudo netstat tap grep mysql,如果啟動成功,出現以下資訊 tcp00localhost.localdomain mysql listen ...