我在WPF中启动两个背靠背进程,两者之间有UI更改。还有一个包含它的while循环。所以,代码看起来类似于:
while(stackpanel.Children.Count != 0)
{
Grid grid = stackpanel.Children[0] as Grid;
// start process 1 and WaitForExit()
stackpanel.Remove(grid);
// start process 2 and WaitForExit()
}
问题是在第一个进程存在之后和第二个进程启动之前,UI没有更新。它仅在while循环终止时更新一次。
我如何实现上述逻辑并能够重绘stackpanel?
答案 0 :(得分:1)
在退出方法之前,您是waiting on UI thread which won't let refresh your UI
。
我强烈建议move your long running process on to seperate thread
并等待它,一旦完成,请通过Dispatcher回调UI线程。
但是,您可以通过简单地在UI调度程序上排队一个空委托来优先设置为渲染来使用解决方法,以便您的UI得到刷新 -
while(stackpanel.Children.Count != 0)
{
Grid grid = stackpanel.Children[0] as Grid;
// start process 1 and WaitForExit()
stackpanel.Remove(grid);
Dispatcher.Invoke((Action)(() => { }), DispatcherPriority.Render);
// start process 2 and WaitForExit()
}
有关详情,请参阅我对here的回答。
答案 1 :(得分:0)
你试过这些:UpdateLayout()
? stackPanel.InvalidateVisual()
?也许是PropertyChanged with String.Empty?