WPF实时进度条

时间:2011-08-17 12:27:39

标签: c# wpf .net-4.0

我正在为我的WPF应用程序添加进度条。我想在进度条上显示实时进度以及实时生成文件的计数,如生成4/100文件等。以下是执行这些操作的两个操作和任务

     Action Generate = new Action(() =>
            {
                foreach (string file in Files)
                {                  

            //all the logic to generate files


                    using (var streamWriter = new StreamWriter(newFileName, false, Encoding.Default))
                    {
                        foreach (string segment in newFile)
                        {
                            streamWriter.WriteLine(segment);
                        }
                        filesGenerated++;  

                //I need to do the second action here                    
                    }

                }
            });


   Action ShowProgressBar = new Action(() =>
            {
                progressBar.Value = filesGenerated 
  lblProgress.Content = filesGenerated + " File(s) Generated."; 

            });

   Task GenerateTask = Task.Factory.StartNew(() => Generate());

   Task ShowProgressBarTask = new Task(ShowProgressBar);

我试图嵌套任务,但它无法正常工作。我应该怎么做才能显示进度条的实时进度。

3 个答案:

答案 0 :(得分:3)

  1. 在另一个帖子中运行您的文件创建代码

  2. 使用Dispatcher在foreach循环中设置进度条的值,导致您在另一个线程上,并且无法更改该控件的UI控件。

  3. 基本上你已经完成了。

答案 1 :(得分:0)

在BackgroundWorker herehere上查看我的答案。

基本上,您将使用BackgroundWorker的方法和事件将文件创建移动到另一个线程,并在UI线程中报告进度。

答案 2 :(得分:-1)

public static class Refresh 

    {
        public static void Refresh_Controls(this UIElement uiElement)
        {
            uiElement.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => { }));
        }
    }

在您的主要代码中:

Refresh.Refresh_Controls(progressBar1);