0

我在 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 循环终止时更新一次。

我怎样才能实现上述逻辑并能够重绘堆栈面板?

4

2 回答 2

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()
    }

有关详细信息,请参阅我的回答。

于 2013-11-05T05:39:39.323 回答
0

你试过这些:UpdateLayout()stackPanel.InvalidateVisual()? 可能是带有 String.Empty 的 PropertyChanged

于 2013-11-05T04:13:01.437 回答