Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 启动WPF应用程序时,App_Startup()与OnStartup()的比较_C#_.net_Wpf - Fatal编程技术网

C# 启动WPF应用程序时,App_Startup()与OnStartup()的比较

C# 启动WPF应用程序时,App_Startup()与OnStartup()的比较,c#,.net,wpf,C#,.net,Wpf,我开始了一个新的WPF项目,我需要在应用程序启动照明 我观看了两个不同的WPF项目,以了解如何开始 第一个从App.xaml.cs文件中的void App_Startupobject发送方StartupEventArgs e方法开始,该方法直接从App.xaml文件Startup=App_Startup调用。 另一个以App.xaml.cs文件中受保护的override void onStartupEventArgs e方法开始。 此外,当我启动我的WPF项目时,默认代码模板以第三种方式启动,即

我开始了一个新的WPF项目,我需要在应用程序启动照明

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

第一个从App.xaml.cs文件中的void App_Startupobject发送方StartupEventArgs e方法开始,该方法直接从App.xaml文件Startup=App_Startup调用。 另一个以App.xaml.cs文件中受保护的override void onStartupEventArgs e方法开始。 此外,当我启动我的WPF项目时,默认代码模板以第三种方式启动,即App.xaml文件中的StartupUri=MainWindow.xaml

这三种方式的区别是什么?

Startup=App\u Startup只是应用程序的事件处理程序,它是在App.xaml中启动的。它有事件启动,您可以订阅。如果你想有一些预加载逻辑,这是一个完美的地方

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

OnStartup在base.OnStratUp中引发应用程序启动事件:

OnStartup引发启动事件

从应用程序派生的类型可以在启动时重写。如果需要引发启动事件,则重写的方法必须在基类中调用OnStartup

还可以设置一些预加载逻辑

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

Startup=App\u Startup只是应用程序的事件处理程序,它是在App.xaml中启动的。它有事件启动,您可以订阅。如果你想有一些预加载逻辑,这是一个完美的地方

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

OnStartup在base.OnStratUp中引发应用程序启动事件:

OnStartup引发启动事件

从应用程序派生的类型可以在启动时重写。如果需要引发启动事件,则重写的方法必须在基类中调用OnStartup

还可以设置一些预加载逻辑

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

启动是由应用程序基类的OnStartup方法引发的事件,如中所示。这就是它的实现方式:

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

    StartupEventHandler handler = (StartupEventHandler)Events[EVENT_STARTUP];
    if (handler != null)
    {
        handler(this, e);
    }
}
因此,如果您在应用程序类中重写OnStartup并调用base.OnStartupe,则将引发该事件并调用任何附加的事件处理程序。您是在事件处理程序中实现逻辑,还是直接在重写的OnStartup中实现逻辑,取决于个人或特定于应用程序的偏好。关于为什么一个比另一个更好,没有任何建议

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

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

Startup是由应用程序基类的OnStartup方法引发的事件,如中所示。这就是它的实现方式:

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

    StartupEventHandler handler = (StartupEventHandler)Events[EVENT_STARTUP];
    if (handler != null)
    {
        handler(this, e);
    }
}
因此,如果您在应用程序类中重写OnStartup并调用base.OnStartupe,则将引发该事件并调用任何附加的事件处理程序。您是在事件处理程序中实现逻辑,还是直接在重写的OnStartup中实现逻辑,取决于个人或特定于应用程序的偏好。关于为什么一个比另一个更好,没有任何建议

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

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