【发布时间】:2013-01-26 11:54:22
【问题描述】:
如果工作人员仍在忙于处理单个代码行,是否有任何方法可以在 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
【问题讨论】:
-
这是不可能的,你需要修复这个错误。如果不能,则需要在另一个可以 Kill() 的进程中运行此代码。
-
我在 Backgroundworker 的 DoWork 中使用了第 3 方 dll。那是那个dll的一个错误:(。为什么Backgroundworker在线程中没有像Join()这样的东西:(
标签: multithreading backgroundworker