[WPF] Application_Startup vs OnStartup

WPF에서 App.xaml.cs 에서 MainWindow 창이 뜨기 전에 뭔가 하고 싶다면 Application_Startup 또는 OnStartUp을 override해서 사용하는 듯한데, 두 가지의 차이점이 무엇인가요?

2개의 좋아요

@Vincent Application 내부에서 virtual OnStartup 메서드가 생성자 부분에서 실행되거든요.

public Application()
{
    OnStartup(e);
}

virtual OnStartup(event e)
{
    Startup.Invoke(e);
}

(소스는 정확하지 않습니다… 대략 이런식일거라는…)

그래서 OnStartup이 먼저 실행되고,
Startup 이벤트가 호출됩니다.

그래서 만약에 base.OnStartup(e); 부분을 지우게 되면 Startup 이벤트도 호출되지 않아요~

public class App : Application
{
    public App()
    {
        this.Startup += App_Startup;
    }
    
    void App_Startup(sender, e)
    {

    }

    public override OnStartup(e)
    {
        // base.OnStartup(e); 만약 지우면 Startup 이벤트도 호출 x
    }
}
3개의 좋아요

와…딱 제가 원하던 답변입니다. base.OnStartup 어떻게되는지도 여쭤보려고 했는데…ㅋㅋ 감사합니다!

1개의 좋아요

이제 우리는 WPF의 소스코드를 살펴볼 수 있습니다 :open_mouth:

wpf/Application.cs at main · dotnet/wpf (github.com)

생성자에서 OnStartup()을 호출하는 160번째 줄,
OnStartup()에서 Startup 이벤트가 있을 경우 호출해주는 1216번째 줄을 살펴보시면,

@jamesnet214 님의 답변과 유사함을 알 수 있습니다!

4개의 좋아요