Wpf progressbar在方法计算期间未更新
在我的应用程序中,我有一个导入选项,从.csv或.txt文件中读取信息并将其写入数据库。为了测试,我只使用了200-300行数据。在方法开始时,我计算要读取的对象/行数。每次将对象写入数据库时,我都要更新progressbar。我就是这样做的:Wpf progressbar在方法计算期间未更新,wpf,multithreading,progress-bar,Wpf,Multithreading,Progress Bar,在我的应用程序中,我有一个导入选项,从.csv或.txt文件中读取信息并将其写入数据库。为了测试,我只使用了200-300行数据。在方法开始时,我计算要读取的对象/行数。每次将对象写入数据库时,我都要更新progressbar。我就是这样做的: private void Update(string path) { double lines = 0; using (StreamReader reader = new StreamReader(path))
private void Update(string path)
{
double lines = 0;
using (StreamReader reader = new StreamReader(path))
while ((reader.ReadLine()) != null)
lines++;
if (lines != 0)
{
double progress = 0;
string lijn;
double value = 0;
List<User> users = new List<User>();
using (StreamReader reader = new StreamReader(path))
while ((line = reader.ReadLine()) != null)
{
progress++;
value = (progress / lines) * 100.0;
updateProgressBar(value);
try
{
User user = ProcessLine(lijn);
}
catch (ArgumentOutOfRangeException)
{ continue; }
catch (Exception)
{ continue; }
}
return;
}
else
{
//non relevant code
}
}
当我查看输出时,值的计算是正确的,但是progressbar仅在方法完全调用后才显示更改,所以当作业完成时。现在向用户显示反馈已经太迟了
谁能帮我解决这个问题
编辑:
我还试图在标签中显示一些文本,告诉te用户正在做什么,这些文本直到方法完成后才会显示
提前感谢。这将是一个使用BackgroundWorker的好地方(通过一个示例链接到MSDN的说明) 您可以为ProgressChanged事件注册一个事件处理程序(您将在执行读取行的工作时定期引发该事件)
delegate void updateProgressbarCallback(double value);
private void updateProgressBar(double value)
{
if (pgbImportExport.Dispatcher.CheckAccess() == false)
{
updateProgressbarCallback uCallBack = new updateProgressbarCallback(updateProgressBar);
pgbImportExport.Dispatcher.Invoke(uCallBack, value);
}
else
{
Console.WriteLine(value);
pgbImportExport.Value = value;
}
}