2012-04-25 9 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を作成し、アニメーションを再生させ、アニメーションが終了したら、ページのコンテンツをusercontrolに置き換えます。

+0

私はここであなたのアイデアをテストしましたが、アセンブリの実行時だけでなく、起動時に読み込まれるように見えます。 usercontrolのアイデアは良いものですが、私がしようとしているものに合っていません。しかし、ありがとう! –

関連する問題