我有一个具有计时器的对象,当计时器达到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");
}
));
}
答案 0 :(得分:2)
您可以使用BeginInvoke异步调用消息框。我最近这样做了,并在这里写了博客:http://www.dmcinfo.com/blog.aspx/articleType/ArticleView/articleId/163/Asynchronous-Message-Box-in-WPF.aspx。希望这会有所帮助。
答案 1 :(得分:1)
你使用什么样的计时器?试试DispatchTimer。没有多大意义,它会停止。您可能必须明确事物(从已完成的处理程序再次调用.Start(),但DispatchTimer会自动重置。)
http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer.aspx
你使用DispatchTimer得到的另一件事是它的Dispatch队列会自动评估它的Tick事件,所以你不必将它显式地放在Dispatch队列中......只需自己调用MessageBox.Show。 :)
另外......你在做什么听起来很糟糕...我希望MessageBox.Show只是你的概念证明,你将用SomethingBetterAndNotSoAnnoyingAndModal.Show()替换它,但这对你没有帮助问题,只是观察。
答案 2 :(得分:0)
我不会称之为优雅,但您可以构建自己的Window作为Messagebox使用“Show”而不是“ShowDialog”来调用它。