我使用backgroundworker对象在需要的地方执行一些异步和线程操作。每当我运行背景工作者时,它会在跑步中间停顿并且没有完成。它通常会在我同时运行多个背景工作器时执行此操作。在C中检测一个停顿的BackgroundWorker#
我想要做什么,当它停止是取消操作并重新运行它。我的问题是我不知道如何检测它何时停止。是否有一些我需要添加的代码来“通知”工作人员已经停工或者没有办法知道?
谢谢,
我使用backgroundworker对象在需要的地方执行一些异步和线程操作。每当我运行背景工作者时,它会在跑步中间停顿并且没有完成。它通常会在我同时运行多个背景工作器时执行此操作。在C中检测一个停顿的BackgroundWorker#
我想要做什么,当它停止是取消操作并重新运行它。我的问题是我不知道如何检测它何时停止。是否有一些我需要添加的代码来“通知”工作人员已经停工或者没有办法知道?
谢谢,
你应该调试你的代码并且找出为什么它的拖延。
的BackgroundWorker提供了以下回调:
如果您希望为异步操作强制实施某种服务级别,那么您可以使用包装器对此进行扩展以记录警告,如果操作花费的时间超过一定时间。 (例如,当DoWork被调用时启动一个计时器,当计时器经过时记录警告,完成时清除计时器)
这完全取决于你的意思是“停滞”。如果你设法使工作线程死锁,那么你需要找到问题并解决问题。如果抛出异常,那么应该触发RunWorkerCompleted
事件,并在事件参数中使用非空Error
。
RunWorkerCompleted不会被调用。你和sambo对僵局有同样的想法,所以我要检查一下。谢谢。 – Phillip 2009-06-15 04:31:42
Marc,我更新了我的答案,仍然认为RunWorkerAsync上有一个丢失覆盖,它应该允许您指定一个超时,以便更容易执行SLA。此外,我喜欢传递动作比订阅事件好,如果感觉不到副作用,但它只是个人的品味。 – 2009-06-15 08:47:31