C#更新自定义进度栏Windows窗体上的标签

时间:2019-03-25 09:35:00

标签: c# multithreading forms

我正在创建一个模拟进度条的表单。

该表单具有进度条,带有标题的标签和另一个显示进度百分比的标签。

这个想法是在开始循环之前,我使用该循环的元素计数创建表单的实例。循环的每次迭代都会调用一个方法来更新进度条和百分比标签。

进度栏正在更新,但标题和百分比标签未在更新。我读过那是因为所有内容都在同一线程中执行,并且用户界面没有更新。

这是我的代码:

主程序

...

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();
        }
    }
}

Problem

1 个答案:

答案 0 :(得分:-1)

在循环内尝试Application.DoEvents()。