Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf progressbar在方法计算期间未更新_Wpf_Multithreading_Progress Bar - Fatal编程技术网

Wpf 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))

在我的应用程序中,我有一个导入选项,从.csv或.txt文件中读取信息并将其写入数据库。为了测试,我只使用了200-300行数据。在方法开始时,我计算要读取的对象/行数。每次将对象写入数据库时,我都要更新progressbar。我就是这样做的:

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;
        }
    }