4

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

我还不确定它是否触发了RunWorkerCompleted,我没有添加事件,显然需要很长时间来测试。工作人员从按下按钮开始,并不断循环,抓取数据并将其打印到 GUI。

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

仅当另一个按钮按下而取消时,循环才会退出,而我从未按下过。

我只是好奇该课程是否有某种记录的超时BackgroundWorker

4

3 回答 3

1

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

void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Error == null)
    {
        //Worker completed successfully
    }
    else
    {
        //An error was thrown
    }
}
于 2013-06-13T17:29:03.690 回答
0

BackgroundWorker 没有/不支持超时。由于cpu使用或类似情况,线程更有可能被杀死。

但首先你有一些日志记录机制吗?这在此类操作中至关重要。

代码在try..catch块内吗?

于 2013-06-13T16:49:16.093 回答
0

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

BackgroundWorker 意外死亡

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

于 2013-06-13T16:45:59.183 回答