我正在启动一个新的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。
还可以放入一些预加载逻辑。
没有推荐的方法,这取决于你和你需要什么。