如何使用C#在运行时更新进度条

5
我正在使用以下代码来更新我的进度条。
        ProgressBar.Visible = true; 
        ProgressBar.Minimum = 1; 
        ProgressBar.Maximum = PortCount; 
        ProgressBar.Value = 1; 
        ProgressBar.Step = 1; 

        int intdata = 5;
        for (int x = 1; x <= intdata; x++)
          {
            ProgressBar.PerformStep();
        }

        MessageBox.Show("Done");

但是,在运行时它没有被更新。这是因为进度条在同一个线程中吗?如果是这样,如何从另一个线程更新此进度。

2个回答

6

你没有给消息泵足够的时间来更新控件。

虽然上述两种方法都不好,但你可以选择:

  • 在控件上调用 Refresh
  • 调用 Application.DoEvents

6
这是Windows Forms吗?在ProgressBar上调用Refresh()应该就可以了。你也可以使用Application.DoEvents,这样可以让你的UI响应用户输入,而不是在过程中锁定。
更好的方法是使用BackgroundWorker类。在后台线程上完成工作,并通过ReportProgress方法向UI线程发送进度更新。这样可以保持UI线程的响应性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接