1

I have an object that has a timer and it throws an event when the timer reaches to 5 minutes. In this event, I call a MessageBox.Show("Something") in my MainWindow.xaml.cs.

The problem is that when I call the MessageBox.Show(), the timer stops, until the user hits ok. And I need the timer to keep going even if the user hasn't clicked ok. Is where a good, elegant way to do this? This is what I've tried so far (but didn't work):

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

3 に答える 3

2

BeginInvoke を使用してメッセージ ボックスを非同期的に呼び出すことができます。私は最近これを行い、ここでブログを書きました: http://www.dmcinfo.com/blog.aspx/articleType/ArticleView/articleId/163/Asynchronous-Message-Box-in-WPF.aspx。お役に立てれば。

于 2010-03-09T17:26:21.677 に答える
1

タイマーは何をお使いですか?DispatchTimer を試してください。やめてもあまり意味がありません。物事について明示する必要があるかもしれません (完了したハンドラーから .Start() を再度呼び出しますが、DispatchTimer は自動リセットします)。

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

DispatchTimerで得られるもう1つのことは、TickイベントがDispatchキューで自動的に評価されるため、明示的にDispatchキューに入れる必要はありません.MessageBox.Show自分自身を呼び出すだけです. :)

また...あなたがしていることはひどいように聞こえます... MessageBox.Show があなたの概念実証に過ぎず、それをSomethingBetterAndNotSoAnnoyingAndModal.Show()に置き換えることを望んでいますが、これはあなたの質問には役に立ちません。観察。

于 2009-07-27T13:23:52.083 に答える
0

エレガントとは言えませんが、メッセージボックスとして使用する独自のウィンドウを作成し、「ShowDialog」ではなく「Show」で呼び出すことができます。

于 2009-07-27T03:29:25.957 に答える