2009-07-27 98 views
1

我有一个对象有一个计时器,它会在计时器达到5分钟时引发一个事件。在这个事件中,我在MainWindow.xaml.cs中调用MessageBox.Show(“Something”)。WPF调用MessageBox.Show异步

问题是,当我调用MessageBox.Show()时,计时器停止,直到用户点击确定。即使用户没有点击确定,我也需要定时器继续。是一个很好的,优雅的方式来做到这一点?这是我到目前为止已经试过(但不工作):

 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 。展示你自己。 :)

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

0

我不会把它优雅,但你可以建立自己的窗口,作为一个消息框使用,并以“秀”叫它而不是“ShowDialog”。