C# 背景工作人员报告进度c

C# 背景工作人员报告进度c,c#,progress-bar,backgroundworker,C#,Progress Bar,Backgroundworker,我的代码: BackgroundWorker worker = new BackgroundWorker(); worker.WorkerSupportsCancellation = true; worker.WorkerReportsProgress = true; worker.ProgressChanged += new ProgressChangedEventHandler (worker_ProgressChanged); worker.DoWork += delegate(obje

我的代码:

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

如果你不能修改ResourceConsumingFunction,那你就倒霉了

既然ResourceConsumingFunction完成了所有的工作,如果您不能修改它以报告进度,您希望如何显示进度?剩下的代码无法神奇地猜测ResourceConsumingFunction在完成之前将运行多长时间。

如果您不能修改ResourceConsumingFunction,您的运气就不好了


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

正如伊文德·克诺布洛赫所指出的那样——如果您无法从ResourceConsumingFunction获得有关进度的信息,则无法报告进度。 您需要某种方法连接到ResourceConsumingFunction来衡量其进度。是创建文件、将某些内容写入磁盘还是更改可访问的变量,这些变量可以作为进度值进行测量/使用,而无需访问函数的工作方式?
如果您无法获得此函数进度的外部句柄,那么您的任务将注定失败。

正如伊文德·克诺布洛赫所正确指出的那样-如果您无法从ResourceConsumingFunction获取有关进度的信息,那么您将无法报告它。 您需要某种方法连接到ResourceConsumingFunction来衡量其进度。是创建文件、将某些内容写入磁盘还是更改可访问的变量,这些变量可以作为进度值进行测量/使用,而无需访问函数的工作方式?
如果无法获取此函数进度的外部句柄,则您的进程将失败。

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