我正在使用後臺工作程序的程序,我試圖讓我的取消工作。當取消該程序時,我希望它更新我的數據庫(將其放入操作被取消的日誌中),併發送一封包含該狀態的電子郵件。取消後臺工作人員,更新數據庫和郵件
我有我的程序下面的代碼: (在後臺工作的頂部)
If bworker.CancellationPending Then
e.Cancel = True
Exit Do
End If
其中一期工程,並得到我的腳本bgworker_RunWorkerCompleted一部分。但從那裏分崩離析。我遇到了很多異常,它們或者像「操作被取消」一樣簡單,或者當它不應該嘗試調用處置對象時發生錯誤。
下面是RunWorkerCompleted代碼:)
Private Sub bgworker_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) Handles bgworker.RunWorkerCompleted
StopTimer()
If e.Cancelled Then
Call UpdateDB(e.Result(0), e.Result(1), e.Result(5), e.Result(2), e.Result(3), "Cancelled")
MessageBox.Show("Got Here - Cancelled")
CloseMe()
Else
MessageBox.Show("Got Here - Complete")
Call UpdateDB(e.Result(0), e.Result(1), e.Result(5), e.Result(2), e.Result(3), e.Result(7))
CloseMe()
End If
End Sub
CloseMe(只關閉窗口,刪除一個托盤圖標,然後決定是否完全關閉該程序或只是回到主菜單。當我取消了該程序並且沒有第一個MessageBox.Show(取消部分內)時,我看到完成/未取消代碼區域內的消息框。一旦我放入取消區域的MessageBox.Show中,我開始獲得通用的「操作已取消」異常。
關於如何完成此操作的任何想法,以便操作可以被取消,同時允許它提醒我它已被取消並且不拋出異常?
謝謝!
謝謝傑夫,你的回答讓我走上了正確的道路。我最終做的是在全局聲明一個名爲results的數組(我已經在後臺工作者中使用它),然後在那裏設置所有的結果。一旦我到達runworker完成,如果它被取消,我只是引用該數組而不是e.Result,現在一切工作正常 –
記住如果需要修改全局數組使用'Lock';看[這個答案](http://stackoverflow.com/a/4517075/55487) – Geoff