在我的WPF应用程序的App.xaml.cs
内,从入口点Main()
开始,它看起来像这样:
[STAThread]
public static void Main()
{
var app = new App();
app.StartApp();
}
当取消注释两个MessageBox中的任何一个时,我会遇到一些意外行为。
protected void StartApp()
{
// uncomment this = the messagebox will show and return after 'okay' is clicked.
// The application will never start even after `this.Run()` is called?
//MessageBox.Show("Hello");
this.InitializeComponent(); //auto generated code
this.StartupUri = new Uri("MainWindow.xaml", UriKind.Relative);
// uncomment this = the messagebox will show and simultaneously the application will run().
// The line below will only be hit on termination of the application
//MessageBox.Show("Hello");
this.Run();
}
猜测一下,MessageBox.Show
正在使用当前的应用程序上下文做一些时髦的事情,因为MessageBox.Show
的第一行Main()
完全符合预期。
答案 0 :(得分:0)
Application.Run()
调用Dispatcher.Run()
。
最后一个运行窗口消息循环。
MessageBox.Show
内的原生消息框也是如此。
因此应避免在Application.Run()
之前调用消息框。
答案 1 :(得分:0)
Task.Run(()=>MessageBox.Show("Hello")).Wait()
将产生预期的'结果 - 即它的消息泵不会影响调用应用程序的执行。