2013-03-27 2 views
0

wpf 응용 프로그램에 스플래시 화면을 구현하고 싶습니다. 여기서 일부 상태 메시지를 표시 할 수 있습니다. 나는 그것을하는 방법에 좋은 튜토리얼을 발견했다.WPF 리소스가 SplashScreen 구현 후로드되지 않습니다.

mvvm 툴킷을 사용하고 있습니다. 내 App.xaml의 StartupUri에 "View/Shell.xaml"이 설정되어 있습니다. 이 모든 것이 잘 작동합니다. 이제 StartupUri가 호출되기 전에 Splashscreen을 시작하고 싶습니다. 내가이 주요 방법으로 프로젝트의 환경 설정에서 startupobject을 변경했다 실행하려면이 들어

[STAThread()] 
    static void Main() 
    { 
     Splasher.Splash = new IPA.Merlin.View.ViewSplashScreen(); 
     Splasher.ShowSplash(); 

     for (int i = 0; i < 1000; i++) 
     { 
      MessageListener.Instance.ReceiveMessage(string.Format("Load module {0}", i)); 
      Thread.Sleep(1); 
     } 

     new App(); 
    } 
    /// <summary> 
    /// 
    /// </summary> 
    public App() 
    { 
     StartupUri = new System.Uri("View/Shell.xaml", UriKind.Relative); 

     Run(); 
    } 

:

는 App.xaml.cs를 나는 같은 주요 방법을 구현했습니다.

이제 Splashscreen이 호출되고 테스트 메시지가 표시되고이 App()이 호출 된 후에 테스트 메시지가 표시됩니다. 다음 오류가 발생합니다. 'System.Windows.StaticResourceExtension'값을 제공하면 내부 오류가있는 예외가 발생했습니다. "이름이 {Locator} 인 리소스를 찾을 수 없습니다.

StartupUri를 다른 창으로 변경하면이 창 자원도 찾을 수 없습니다. 내가 모든 자료가 문제없이 발견되는 스플래시 스크린없이. startupobject을 변경 한 다음 자신을 app.run 호출 할 경우에만 occours.

나를 미치게 만들고 있기 때문에 사람이 좀 도와 줄래

미리 감사드립니다.

답변

0

는 대신 Main() 방법을 만드는, 당신은 override OnStartup 방법 before main window gets initialized (App.xaml.cs) 호출 될 수있는 -이 시도

protected override void OnStartup(StartupEventArgs e) 
{ 
    base.OnStartup(e); 

    Splasher.Splash = new IPA.Merlin.View.ViewSplashScreen(); 
    Splasher.ShowSplash(); 

    for (int i = 0; i < 1000; i++) 
    { 
     MessageListener.Instance.ReceiveMessage(string.Format("Load module {0}", i)); 
     Thread.Sleep(1); 
    } 

    Splasher.CloseSplash(); 
} 
+0

을하지만, OnStartup 이벤트가 발생하지 않는 것 같습니다. 나는 이것을 브레이크 포인트로 점검했다. 나는 또한 새로운 시작 기능을 설정하려고 시도했지만 VS는 "Application_Startup"에 대한 정의가 없다는 것을 알려줍니다. 어떤 아이디어? – StefanG

+0

이 메소드를'App' 클래스에 넣고 애플리케이션의 엔트리 포인트를 하나만 가질 수 있기 때문에 정적'Main' 메소드를 제거해야합니다. –

관련 문제