【发布时间】:2017-01-11 12:14:44
【问题描述】:
我在一个表单上有一个 ProgressBar,我想在父表单执行长时间操作时将其显示为对话框。
ProgressWindow 很简单:
构造函数接受最大值,我有一个增量方法。
public ProgressWindow(int count)
{
InitializeComponent();
fileProgressBar.Maximum = count;
}
public void IncremntProgress()
{
fileProgressBar.Value++;
}
在父节点上创建一个实例:
ProgressWindow progressWindow = new ProgressWindow(listOfFiles.Count);
progressWindow.Show();
然后我运行一个大型操作,我想更新进度条:
foreach (var file in listOfFiles)
{
....
progressWindow.IncremntProgress();
}
progressWindow.Close();
这可行,但我希望表单是一个对话框,并且进度条不能正确刷新。
有没有更好的方法来更新对话框窗口上的进度条?
【问题讨论】:
-
您在 XAML 上是否有
ProgressBaran 最小值和最大值?<ProgressBar Minimum="0" Maximum="100" Name="fileProgressBar" /> -
如果您在 UI 线程中运行大型操作,那么在
foreach的整个持续时间内,您不会让 UI 绘制/更新任何内容。三种方法:1)将操作移动到单独的线程并调用(最佳)2)使用在另一个线程中创建的窗口显示进度(如果您必须对 UI 调用太多更改可能会很好)3)在循环内定期调用Application.DoEvents()(不推荐)。 -
是的,我已经设置了最小值和最大值
标签: c# wpf dialog progress-bar