我正在为我的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);
我试图嵌套任务,但它无法正常工作。我应该怎么做才能显示进度条的实时进度。
答案 0 :(得分:3)
在另一个帖子中运行您的文件创建代码
使用Dispatcher在foreach循环中设置进度条的值,导致您在另一个线程上,并且无法更改该控件的UI控件。
基本上你已经完成了。
答案 1 :(得分:0)
在BackgroundWorker here和here上查看我的答案。
基本上,您将使用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);