backgroundworker报告进度c#

时间:2011-12-01 09:20:22

标签: c# progress-bar backgroundworker

我的代码:

BackgroundWorker worker = new BackgroundWorker();
worker.WorkerSupportsCancellation = true;
worker.WorkerReportsProgress = true;
worker.ProgressChanged += new ProgressChangedEventHandler  (worker_ProgressChanged);
worker.DoWork += delegate(object s, DoWorkEventArgs args)
{

     ResourceConsumingFunction();
};
worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args)
{
        Finished(true);
};
worker.RunWorkerAsync();

我希望经常报告进度,但不知道如何做到这一点。我无法修改resourceConsumingFunction(); 有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果你不能修改ResourceConsumingFunction你的运气不好。

由于ResourceConsumingFunction执行所有工作,如果您无法修改它以报告进度,那么您希望如何显示进度?其余的代码无法猜测ResourceConsumingFunction在完成之前要运行多长时间。

答案 1 :(得分:1)

正如ØyvindKnobloch-Bråthen正确指出的那样 - 如果你无法从ResourceConsumingFunction获取有关进展的信息,那么你就无法报告。
您需要一些方法来挂钩ResourceConsumingFunction来衡量其进度。它是创建文件,将某些内容写入磁盘还是更改可以测量/用作进度值的可访问变量而无法访问该功能的工作方式?
如果你无法获得关于这个功能进展的外部处理,那么你就注定了。