如果工作人员仍在忙于处理单个代码行,有没有办法在x秒后取消后台工作(即超时5秒)? (永远不要到While循环结束来检查CancellationPending)? 例如:
Private Sub DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Dim worker As BackgroundWorker = DirectCast(sender, BackgroundWorker)
While Not worker.CancellationPending
Dim args As ArgumentType = CType(e.Argument, ArgumentType)
Try
process #1
process #2 --> hanging here. Never throw exception.
...
process #n
Catch ex as Exception
'Never come here
End Try
End While
End Sub
答案 0 :(得分:0)
您可以通过两种方式解决此问题:
DoWork
处理程序轮询取消 - 当取消时请求,您只需忽略任务的结果(或以不干扰后续计算的方式管理它)。process #2
实际上是一个程序,您可以启动您的流程然后利用Process.WaitForExit
(http://msdn.microsoft.com/en-us/library/ty0d8k56.aspx) - 也就是说,您等待一段时间让流程退出然后检查是否要求取消。