循环更新进度条

时间:2015-09-01 05:14:25

标签: c# wpf

我有一个方法getPlugins需要很长时间才能运行。从本质上讲,它解析了一个非常大的日志文件。我知道日志文件从时间0到时间24。我想根据当前时间更新ProgressBar。这是我的代码的结构,但是一旦我的循环结束,条形似乎只会更新...我该如何解决这个问题?

private void getPlugins(String filePath)
{
     var w = new Window2();
     w.Show();
     w.progress.Value = 0;

     List<String> pluginNames = new List<String>();

     string strLine;

     // Read the file and display it line by line.
     System.IO.StreamReader file = new System.IO.StreamReader(filePath);

      while ((strLine = file.ReadLine()) != null)
      {
          // Do stuff....

          float time; // Here I have time as a float from 0 to 24
          w.progress.Value = time;
      }

      file.Close();
      w.progress.Value = 24;
      w.Close();
}

1 个答案:

答案 0 :(得分:1)

基本上,我们的想法是您无法直接从非UI线程更新UI元素。 WPF有一个Dispatcher类,可以访问UI元素,使用它可以更新UI元素,如下面的代码

Application.Current.Dispatcher.Invoke(DispatcherPriority.ApplicationIdle, (Action)(() =>
                    {
                        w.progress.Value = time;
                    }));