启动 WPF 应用程序时的 App_Startup() VS OnStartup()

Jea*_*kow 3 .net c# wpf

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

我观看了 2 个不同的 WPF 项目来了解如何开始。

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

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

这三种方式有什么区别呢?

mm8*_*mm8 6

StartupOnStartup是由基类的方法引发的事件,如参考源Application中所示。这是它的实现方式:

protected virtual void OnStartup(StartupEventArgs e)
{
    VerifyAccess();

    StartupEventHandler handler = (StartupEventHandler)Events[EVENT_STARTUP];
    if (handler != null)
    {
        handler(this, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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