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

Anu*_*uya 5 c#

我使用以下代码更新我的进度条.

        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");
Run Code Online (Sandbox Code Playgroud)

但是,它在运行时没有得到更新.是因为进度条在同一个线程中.如果是这样,如何从另一个线程更新此进度.救命...

lep*_*pie 6

您没有给消息泵时间更新控件.

虽然其中任何一个都不好,你可以这样做:

  • 呼吁Refresh控制
  • 呼叫 Application.DoEvents


Jos*_*osh 6

这是Windows窗体吗?在ProgressBar上调用Refresh()应该这样做.您也可以使用Application.DoEvents,这样可以让您的UI响应用户输入而不是在此过程中锁定.

更好的想法是使用BackgroundWorker类.在后台线程上完成工作,并通过ReportProgress方法将进度更新发送到UI线程.这可以使您的UI线程保持响应.