此代码不显示Window,只是自动关闭。为什么会这样?
class Program
{
[STAThread]
static void Main(string[] args)
{
var window = new MainWindow();
window.ShowDialog();
}
}
我知道您可以修复它添加新的Application.Run(window)
,但我想知道它为什么会出现这种行为以及为什么必须在窗口实例上调用Run方法。
修改
扩展上一个问题,我注意到这段代码可行:
修改App.xaml.cs,覆盖方法OnStartup
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var window = new MainWindow();
window.Show();
}
}
这样,窗口保持打开状态。引擎盖下发生了什么?
答案 0 :(得分:4)
Microsoft Windows程序基于事件。它们根据操作系统发布到应用程序主线程的消息进行操作。应用程序通过在称为“事件循环”的代码段中重复调用GetMessage(或PeekMessage)函数,从消息队列接收这些消息。
调用Run时,Application会将新的Dispatcher实例附加到UI线程。接下来,调用Dispatcher对象的Run方法,该方法启动消息循环以处理Windows消息。最后,Dispatcher对象调用Application对象的OnStartup方法来引发Startup事件。
如果没有消息循环,应用程序将无法支持UI。