1

我有一个带有计时器的对象,当计时器达到 5 分钟时它会引发一个事件。在这种情况下,我在 MainWindow.xaml.cs 中调用 MessageBox.Show("Something")。

问题是当我调用 MessageBox.Show() 时,计时器停止,直到用户点击确定。即使用户没有点击确定,我也需要计时器继续运行。哪里有一个好的,优雅的方式来做到这一点?这是我迄今为止尝试过的(但没有奏效):

        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 获得的另一件事是,它的 Tick 事件会在 Dispatch 队列上自动评估,因此您不必显式地将它放入 Dispatch 队列......只需调用 MessageBox.Show 自己。:)

另外......你在做什么听起来很糟糕......我希望MessageBox.Show只是你的概念证明,你将用SomethingBetterAndNotSoAnnoyingAndModal.Show()替换它,但这对你的问题没有帮助,只是一个观察。

于 2009-07-27T13:23:52.083 回答
0

我不会称它为优雅,但您可以构建自己的窗口以用作消息框并使用“显示”而不是“显示对话框”来调用它。

于 2009-07-27T03:29:25.957 回答