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의 소스코드를 살펴볼 수 있습니다
wpf/Application.cs at main · dotnet/wpf (github.com)
생성자에서 OnStartup()을 호출하는 160번째 줄,
OnStartup()에서 Startup 이벤트가 있을 경우 호출해주는 1216번째 줄을 살펴보시면,
@jamesnet214 님의 답변과 유사함을 알 수 있습니다!
4개의 좋아요