【发布时间】:2019-03-25 18:07:22
【问题描述】:
我正在创建一个模拟进度条的表单。
表单有一个进度条、一个带有标题的标签和另一个显示进度百分比的标签。
这个想法是,在开始循环之前,我使用该循环的元素计数创建表单的一个实例。循环的每次迭代都会调用一个方法来更新进度条和百分比标签。
进度条更新正常,但标题和百分比标签没有更新。我读过那是因为一切都在同一个线程中执行,并且 UI 没有更新。
这是我的代码:
主程序
...
MyProgressBar_Form pb = new MyProgressBar_Form("Test of progress bar", selectionBudget.Count);
pb.Show();
foreach (SelectedObject obj in selectionBudget) {
pb.meterProgress();
...
}
pb.Close();
...
表单类
public partial class MyProgressBar_Form : Form {
public MyProgressBar_Form(string title, int elems) {
InitializeComponent();
titleLbl.Text = title;
progressBar1.Minimum = 0;
progressBar1.Maximum = elems;
progressBar1.Step = 1;
this.Refresh();
}
public void meterProgress() {
if (progressBar1.Value < progressBar1.Maximum) {
progressBar1.Value++;
double percentage = Math.Round((double)(progressBar1.Value / progressBar1.Maximum * 100), 2);
progressLbl.Text = $"{percentage}%";
this.Refresh();
}
}
}
【问题讨论】:
-
尝试使用
System.ComponentModel.BackgroundWorker。 -
另外,您能否将代码贴在您的主程序中,以便我提出更好的方法?
标签: c# multithreading forms