在两次进程运行之间更新WPF中的主UI

时间:2013-11-05 03:54:34

标签: wpf process waitforexit

我在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?

2 个答案:

答案 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