我正在开发一个使用后台工作人员的程序,我正试图让我的取消工作。取消程序时,我希望它更新我的数据库(将其放入操作已取消的日志中)并发送一封包含状态的电子邮件。
我的程序中有以下代码:(在后台工作人员的顶部)
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 放入取消区域后,我开始收到通用的“操作已取消”异常。
关于如何完成此操作的任何想法,以便可以取消操作,同时允许它提醒我它已被取消并且不引发异常?
谢谢!