1

我使用 backgroundworker 对象在需要的地方执行一些异步和线程。每隔一段时间,当我运行后台工作程序时,它就会在运行过程中停止并且没有完成。当我同时运行超过 1 个后台工作程序时,它通常会这样做。

当它停止时我想做的是取消操作并重新运行它。我的问题是我不知道如何检测它何时停止。我是否需要添加一些代码来“通知”工人已经停滞或无法知道?

谢谢,

4

2 回答 2

4

您应该调试您的代码并找出其停滞的原因

  • 你有多线程死锁吗?
  • 资源池是否已耗尽?
  • 您是否无限期地等待网络资源?
  • 过程中是否抛出异常?

BackgroundWorker 提供以下回调:

  • DoWork,在您的工作开始之前调用。
  • RunWorkerCompleted,当你的工作完成时调用。

如果您想为异步操作强制执行某种服务级别,您可以使用包装器扩展它以记录警告,如果操作花费的时间超过一定时间。(例如,在调用 DoWork 时启动计时器,并且当计时器经过时记录警告,完成后清除计时器)

于 2009-06-15T04:27:32.743 回答
2

这完全取决于您所说的“停滞不前”。如果您设法使工作线程死锁,那么您需要找到问题并解开混乱。如果它抛出异常,那么RunWorkerCompleted事件应该触发,事件参数中的非空值Error

于 2009-06-15T04:25:37.553 回答