我使用 backgroundworker 对象在需要时执行一些异步和线程处理。每隔一段时间,当我运行 backgroundworker 时,它会在运行过程中停止并且没有完成。当我同时运行超过 1 个后台工作程序时,它通常会执行此操作。
当它停止时我想做的是取消操作并重新运行它。我的问题是我不知道如何检测它何时停滞。是否需要添加一些代码来“通知”工作人员已停滞或无法知道?
谢谢,
最佳答案
您应该调试您的代码并找出它停止的原因。
- 你有多线程死锁吗?
- 资源池是否耗尽?
- 您是否在无限期地等待网络资源?
- 是否在进程中抛出异常?
BackgroundWorker 提供以下回调:
- DoWork,在您的工作开始之前调用。
- RunWorkerCompleted,在您的工作完成时调用。
如果您想为异步操作强制执行某种服务级别,则可以使用包装器扩展它以在操作花费的时间超过一定时间时记录警告。 (例如,在调用 DoWork 时启动计时器,当计时器结束时记录警告,完成后清除计时器)
关于c# - 在 C# 中检测停滞的 BackgroundWorker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/994479/