2009-07-27 12 views
1

私はタイマーを持つオブジェクトを持っていて、タイマーが5分に達するとイベントをスローします。この場合、私はMainWindow.xaml.csのMessageBox.Show( "Something")を呼び出します。WPF MessageBox.Show非同期に呼び出します

問題は、MessageBox.Show()を呼び出すと、ユーザーがOKを押すまでタイマーが停止するという問題です。また、ユーザーがOKをクリックしていなくても、タイマーを続ける必要があります。これは良い、エレガントな方法ですか?これは私がこれまで試したものです(ただし、動作しませんでした):

 private void OnAlert(object sender, MvpEventArgs e) 
     { 
      this.Dispatcher.Invoke(
       System.Windows.Threading.DispatcherPriority.Normal, 
       new Action(
        delegate() 
        { 
         MessageBox.Show("Alert"); 
        } 
      )); 
     } 

答えて

1

どのようなタイマーを使用していますか? DispatchTimerを試してください。それが止まるとは思わない。完了したハンドラから.Start()を再度呼び出すが、DispatchTimerは自動的にリセットされます)。

http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer.aspx

あなたがDispatchTimerを得る他の事はあなただけのメッセージボックスを呼び出す...明示的にディスパッチキューに入れてする必要はありませんので、それは、Tickイベントが自動的ディスパッチキュー上で評価されるということですあなた自身を見てください。 :)

また、あなたがしていることはひどく聞こえる...私はMessageBox.Showがあなたの概念証明であり、あなたはそれをSomethingBetterAndNotSoAnnoyingAndModal.Show()に置き換えることを望んでいるが、これはそうではないあなたの質問に役立つ、ただの観察。

0

私はエレガントにそれを呼び出すことはありませんが、あなたはMessageboxはとして使用するために、独自のウィンドウを構築し、「ショー」でそれを呼び出すことができます"ShowDialog"ではなく "ShowDialog"を使用します。

関連する問題