【问题标题】:backgroudworker report progress c#backgroundworker 报告进度 c#
【发布时间】:2011-12-01 09:20:21
【问题描述】:

我的代码:

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(); 有什么想法吗?

【问题讨论】:

  • resourceConsumingFynction 会抛出任何进度事件吗?如果是这样,则捕获该事件,然后在内部调用 backgroundWorker ReportProgress 方法。然后捕获 bgw 进度事件并从那里更新 GUI。
  • 您的方法可能会消耗大量资源,这可能是一种气味。也许您可以将ResourceConsumingFunction() 拆分为更小的方法,从而能够报告进度。

标签: c# progress-bar backgroundworker


【解决方案1】:

如果你不能修改ResourceConsumingFunction你倒霉。

既然ResourceConsumingFunction 做了所有的工作,如果你不能修改它来报告进度,你怎么期望能够显示进度?您的其余代码无法神奇地猜测ResourceConsumingFunction 在完成之前将运行多长时间。

【讨论】:

    【解决方案2】:

    正如 Øyvind Knobloch-Bråthen 正确指出的那样 - 如果您无法从 ResourceConsumingFunction 获取有关进度的信息,则无法报告。
    您需要一些方法来挂钩 ResourceConsumingFunction 以衡量其进度。它是创建文件、将某些内容写入磁盘或更改可访问的变量,您可以测量/使用这些变量作为进度值,而无需访问函数的工作原理?
    如果您无法获得有关此功能进度的外部句柄,那么您注定要失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多