【发布时间】:2019-05-04 21:15:38
【问题描述】:
我的程序(在 C# 中使用 Windows 窗体)正在读取和解析大量数据,我正在使用调用这些全局方法(读取和解析)的 Backgroundworker。我想让用户了解它需要多长时间,因此 Backgroundworker 应该显示它正在执行的操作,并且有一个进度条也应该填充每个单独的操作。
不幸的是,我无法让它工作,因为进度条根本没有更新,只是保持空白。
这是我目前所拥有的:
private void InitializeBackgroundWorker()
{
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
}
private void buttonParse_Click(object sender, EventArgs e)
{
DescriptionLabel.Visible = true;
progressBar1.Visible = true;
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
Methods.ParsePerfusionData(backgroundWorker1); //Also tried using 'worker' here, but didnt work either
}
在方法中它看起来像这样:
public static void ParsePerfusionData(BackgroundWorker worker)
{
for (int i = 2; i < Globals.DataList.Count; i++)
{
worker.ReportProgress(i / amount * 100);
rest of the code etc.
}
}
我不能在这样的全局方法中使用后台工作程序吗?提前致谢!
【问题讨论】:
-
为什么不将
progressBar1.MaxValue设置为Globals.DataList.Count,然后只做worker.ReportProgress(i)? -
你设置
backgroundWorker1.WorkerReportsProgress = true了吗? -
@ikerbera 啊,我不知道它是这样工作的,但确实有效,谢谢!
-
@user10680575 没问题,我也倾向于想太多。
标签: c# winforms methods progress-bar backgroundworker