2012-04-25 2 views
1

많은 참고 자료가 있고로드 시간이 내게 받아 들일 수없는 앱이 있습니다. 스플래시 화면 이미지를 제거하고 메인 애플리케이션에 대한 참조없이 별도의 프로젝트를 생성하여 애니메이션 로딩 화면을 생성 한 다음 나머지 애플리케이션의 첫 번째 페이지로 이동합니다. 그것은 지금 빨리 시작하지만 여전히 조금 부족합니다.Windows Phone 7에서 어셈블리를 미리로드 할 수 있습니까?

부하 화면이 사라지기 직전에 다른 애니메이션을하고 싶습니다. 이 작업을 수행하는 유일한 방법은 탐색을 위해 필요한 어셈블리를 실제로 다음 페이지로 미리로드하고 애니메이션을 수행 한 다음 탐색하는 것입니다.

나는

  • OnNavigatedFrom

    을 시도했지만 애니메이션이 페이지가 그 시점에서 매우 빠르게 새로운 페이지로 대체되기 때문에 실행할 수있는 충분한 시간이 없습니다.
  • OnNavigatingFrom
  • 그것이 바로 내가
  • NavigationService.Navigate(); 웹을 검색하고 스택 오버플로 :
  • 나는 또한 고려 다음 페이지가로드의 중복을 표시함으로써 그것을 조금 날조 전화로 호출 중 어떠한 도움이되지 않습니다 화면에서 마지막 애니메이션을 수행하지만로드 스크린 애니메이션의 현재 상태와 일치 할 수없고 유지하기가 더 어려움

어떤 아이디어 주셔서 감사합니다!

답변

0

탐색 할 페이지의 새 인스턴스를 만들면 미리로드 할 수 있습니다. 불행히도 적어도 제 경험상 애니메이션 감속을 유발할 수있는 UI 스레드에서 수행해야합니다.

다음은 애니메이션을 수행 한 다음 미리로드하고 네비게이션하기 전에 다른 애니메이션을 수행하는 방법의 예입니다. :

public partial class LoadScreen : PhoneApplicationPage 
{ 
    public LoadScreen() 
    { 
     InitializeComponent(); 
     this.Loaded += OnLoaded; 
    } 

    private void OnLoaded(object sender, RoutedEventArgs routedEventArgs) 
    { 
     var sb = new Storyboard(); 
     // create your animation here 

     sb.Completed += (sender, args) => PreLoad(); 
     sb.Begin(); 
    } 

    private void PreLoad() 
    { 
     // this is the part that actually takes time and causes things to get loaded 
     // you may need it in a try/catch block depending on what is in your constructor 
     var page = new PageToNavigateTo(); 

     // now create an animation at the end of which we navigate away 
     var sbOut = new Storyboard(); 
     // create your animation here 

     sbOut.Completed += (sender, args) => NavigateToNextScreen(); 
     sbOut.Begin(); 
    } 

    private void NavigateToNextScreen() 
    { 
     // navigate here 
    } 

    protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     base.OnNavigatedFrom(e); 

     // remove the loading screen from the backstack so the user doesn't see it again when hitting the back button 
     NavigationService.RemoveBackEntry(); 
    } 


} 
0

어셈블리를 강제로로드하려면이 어셈블리의 형식을 참조하십시오.

예를 들어, Console.WriteLine(typeof(YourAssembly.SomeType));과 같은 것은 YourAssembly의로드를 강제합니다.

이제 문제가 발생했는데 usercontrols를 사용할 수 있습니까? 메인 페이지의 내용을 사용자 정의 컨트롤에 넣으십시오. 로드 페이지를 표시하고 백그라운드에서 사용자 정의 컨트롤을 만들고 애니메이션을 재생 한 다음 애니메이션 재생이 끝나면 페이지의 내용을 usercontrol로 바꿉니다.

+0

여기에서 아이디어를 테스트했지만 조립품이 줄을 실행했을 때 시작될 때로드되는 것처럼 보입니다. usercontrol 아이디어는 좋은 것이지만 내가하려는 일에 적합하지 않습니다. 그래도 고마워! –

관련 문제