我有一个方法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();
}
答案 0 :(得分:1)
基本上,我们的想法是您无法直接从非UI线程更新UI元素。 WPF有一个Dispatcher
类,可以访问UI元素,使用它可以更新UI元素,如下面的代码
Application.Current.Dispatcher.Invoke(DispatcherPriority.ApplicationIdle, (Action)(() =>
{
w.progress.Value = time;
}));