Windows Phoneアプリケーションで、Page1に移動するためのボタンを押して、ロードが完了する前に、ボタンを押してPage2に移動すると、アプリケーションがクラッシュします。それは正しいですか、そしてこの振る舞いを実装するためのベストプラクティスは何ですか?
更新 一般的に、私にとって最善の方法は、ボタンの1つが押された後に画面上のすべてのボタンをブロックし、ナビゲーションの終了後にアクティブにすることです。これを行うにはどうすればよいですか。
Windows Phoneアプリケーションで、Page1に移動するためのボタンを押して、ロードが完了する前に、ボタンを押してPage2に移動すると、アプリケーションがクラッシュします。それは正しいですか、そしてこの振る舞いを実装するためのベストプラクティスは何ですか?
更新 一般的に、私にとって最善の方法は、ボタンの1つが押された後に画面上のすべてのボタンをブロックし、ナビゲーションの終了後にアクティブにすることです。これを行うにはどうすればよいですか。
この場合のベストプラクティスは、最初のクリック後にClickイベントを無効にすることです。ボタンの名前がbで、xamlまたはコードビハインドのいずれかでイベントハンドラーを割り当てた場合
b.Click += new RoutedEventHandler(ButtonOnClick);
void ButtonOnClick(object sender, RoutedEventArgs e)
{
b.Click -= new RoutedEventHandler(ButtonOnClick);
// Navigate away now.
}
実際、私のサンプルは現在のボタンのダブルクリックのみを停止しますが、他のボタンを無効にすることもできます。
私のアプリの1つで、必要なものを繰り返し表示/非表示、有効化/無効化するリストを維持しています。繰り返して正しいプロパティを設定するだけです。
foreach(var button in myButtons)
button.IsEnabled = false;
NavigationService.Navigate(Page2Uri)
次のようにへの呼び出しをラップしDispatcher.BeginInvoke(()=> {...} );
ます。
Dispatcher.BeginInvoke (()=> { NavigationService.Navigate(Page2Uri) });