進行状況を示す WPF ポップアップを表示しようとしています。
問題は、Thread.Sleep が完了する前にポップアップが表示されないことです。これは単なる例です。私のプログラムでは、同期的に実行する必要がある複雑な IO および DB ロジックがあり、進行状況をポップアップに表示する必要があります。
これが私のコード例です:
private ProgressBar m_ProgressBar;
private void buttonDoWork_Click(object sender, RoutedEventArgs e)
{
var progressPopup = new Popup { PopupAnimation = PopupAnimation.Fade, StaysOpen = true, Height = 150, Width = 260 };
m_ProgressBar = new ProgressBar
{
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Stretch
};
progressPopup.Child = m_ProgressBar;
progressPopup.IsOpen = true;
Thread.Sleep(5000);
this.m_ProgressBar.Value = 25;
Thread.Sleep(5000);
this.m_ProgressBar.Value = 50;
Thread.Sleep(5000);
this.m_ProgressBar.Value = 75;
Thread.Sleep(5000);
this.m_ProgressBar.Value = 100;
}
アップデート
問題は、メイン スレッドをブロックするロジックがメイン スレッドにとどまる必要があることです。他にできることはありません。別のスレッドでポップアップを実行する方法はありますか?