BackgroundWorker在长时间运行时停止运行

时间:2013-06-13 16:42:35

标签: c# wpf timeout backgroundworker

BackgroundWorker在没有用户互动/更改的情况下运行的时间是否有限制?我离开了一个WPF程序,其中一个程序运行了一夜,它在某个时刻停止了。我可以按下按钮在早上触发DoWork,它会再次启动。

我还不确定它是否被解雇RunWorkerCompleted,我没有添加事件,显然需要很长时间才能进行测试。工作人员按下按钮开始,并且连续循环,抓取数据并将其打印到GUI。

while (true)
{
            //Crawl for data, output to WPF window
}

循环仅在取消按下另一个按钮时才退出,我从未按下该按钮。

我只是好奇BackgroundWorker类是否存在某种记录的超时。

3 个答案:

答案 0 :(得分:1)

根据我的评论,您可能会发现您的工作人员遇到了异常。这不一定会使您的程序崩溃,所以尝试类似于以下内容

void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Error == null)
    {
        //Worker completed successfully
    }
    else
    {
        //An error was thrown
    }
}

答案 1 :(得分:0)

理论上它应该永远运行。为了测试它是否真的死了,我会考虑添加一些基本的日志记录。此外,快速检查显示了这可能是正在发生的事情。

BackgroundWorker dies unexpectedly

我会添加RunWorkerCompleted事件处理以查看是否是这种情况。

答案 2 :(得分:0)

BackgroundWorker没有/ supprort超时。 由于cpu的使用或类似的情况,线程被杀死的可能性更大。

但首先你有一些记录机制吗?这在此类行动中至关重要。

代码是否在try..catch块内?