0

WPF で 2 つの連続したプロセスを開始し、その間に 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()
}

問題は、最初のプロセスが存在した後、2 番目のプロセスが開始される前に 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 に答える