none
ShowDialog()の直後、ウインドウを再描画して欲しいのですが? RRS feed

  • 質問

  • ShowDialog()やMessageBox.Show()の後、少々重い処理があると、閉じているいるはずのダイアログ画面やメッセージボックスの残像が残っているのですが、これはどう解決すれば良いのでしょうか?

     

    2010年5月11日 14:46

回答

  • そもそも重い処理を UI スレッドでやっちゃダメと言う話ですが。

    簡易的には、ShowDialog 以降の処理を Dispatcher.BeginInvoke で後回しにする事でしょうか。UI に絡まない処理なら、非同期デリゲートでも問題ないですね。

    • 回答としてマーク Yo48 2010年5月14日 22:21
    2010年5月11日 16:04

すべての返信

  • そもそも重い処理を UI スレッドでやっちゃダメと言う話ですが。

    簡易的には、ShowDialog 以降の処理を Dispatcher.BeginInvoke で後回しにする事でしょうか。UI に絡まない処理なら、非同期デリゲートでも問題ないですね。

    • 回答としてマーク Yo48 2010年5月14日 22:21
    2010年5月11日 16:04
  • Hongliang さん

    ありがとうございます。できました。

    using System.Windows.Threading;   // Dispatcher

    private void OnClick(object sender, RoutedEventArgs e)
    {

         MessageBox.Show( "重いので非同期処理で実行します。" );

         Dispatcher.BeginInvoke( DispatcherPriority.Background, new Action(HardWork));
    }

    private void HardWork()
    {
        // ......
    }

    2010年5月14日 22:27