【发布时间】:2013-10-25 08:11:38
【问题描述】:
public static void CalculateAttributions(BackgroundWorker worker, string _filename, ComboBox cmb, OpenFileDialog open)
{
worker = new BackgroundWorker { WorkerReportsProgress = true };
while (wave.Position != length)
{
...Process..
worker.ReportProgress((100 * (int)(length / wave.Position)) / (int)(length / mainBuffer.Length));
}
}
我在一个类中编写了这个方法来执行我的计算,并使用BackgroundWorker 作为参数来显示Progressbarduring 循环。但是,当我在Form.cs 中运行此方法时
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = Math.Min(e.ProgressPercentage, 100);
}
此事件不起作用,因此 ProgressBar 值未更改。我怎样才能让它工作?
【问题讨论】:
-
你为什么要在方法中创建一个 new BackgroundWorker?你在任何地方调用 BackgroundWorker.RunWorkerAsync 吗?您是否将事件处理程序附加到任何地方的工作人员?基本上,这看起来根本不像使用 BackgroundWorker 的“正常”方式......
-
感谢您的第一个问题。我刚刚创建了新的 BackgroundWorker 来设置 WorkerReportsProgress = true。我应该从 backgroungWorker1 的属性中做到这一点,然后它就可以工作了。但是我没有写 BackgroundWorker.RunWorkerAsync。我不知道我应该把它放在哪里。
-
嗯,这就是启动后台工作者...
标签: c# loops progress-bar backgroundworker