启动WPF应用程序时,App_Start()VS OnStartup()



我正在启动一个新的WPF项目,在启动应用程序时需要照明。

我看了两个不同的WPF项目,看看如何开始。

  • 第一个方法从App.xaml.cs文件中的void App_Startup(object sender, StartupEventArgs e)方法开始,直接从App.xaml文件(Startup="App_Startup"(调用
  • 另一个方法从App.xaml.cs文件中的protected override void OnStartup(StartupEventArgs e)方法开始

此外,当我启动WPF项目时,默认代码模板以第三种方式从App.xaml文件中的StartupUri="MainWindow.xaml"开始。

这三种礼貌有什么不同?

Startup是由Application基类的OnStartup方法引发的事件,如您在引用源中看到的。这就是它的实现方式:

protected virtual void OnStartup(StartupEventArgs e)
{
VerifyAccess();
StartupEventHandler handler = (StartupEventHandler)Events[EVENT_STARTUP];
if (handler != null)
{
handler(this, e);
}
}

因此,如果在App类中重写OnStartup并调用base.OnStartup(e),则会引发该事件,并调用任何附加的事件处理程序。是在事件处理程序中实现逻辑,还是直接在重写的OnStartup中实现逻辑取决于个人偏好或应用程序特定偏好。没有关于为什么一个应该比另一个更好的建议。

对于StartupUri,只有当您只想在启动时立即显示默认窗口,并且没有任何自定义初始化逻辑时,才有意义设置它。

在企业应用程序中,通常使用某种引导程序来设置应用程序及其依赖项,并以编程方式创建和显示主窗口,而不是使用StartupUri属性。

Startup="App_Startup"只是应用程序的事件处理程序,它在App.xaml中启动。它有事件StartUp,您可以订阅;预加载";逻辑上,这是一个完美的地方。

如果您只想显示您的窗口,那么指定该窗口的URI(在StartUpUri中(就足够了,这样应用程序就知道要加载哪个文件和显示哪个窗口:(

OnStartup引发应用程序启动事件(在base.OnStratUp中(,来自文档:

OnStartup引发Startup事件。

从应用程序派生的类型可能会覆盖OnStartup。如果需要引发Startup事件,则重写的方法必须调用基类中的OnStartup。

还可以放入一些预加载逻辑。

没有推荐的方法,这取决于你和你需要什么。

最新更新