1

多くのタイマーを持つ Silverlight でゲームを実装しています。このページから移動するたびに、これらすべてのタイマーを停止します。

場合によっては、ゲーム ページからメニュー ページに移動すると、タイマーがすべて停止しているにもかかわらず、ゲームがまだ実行中で、ゲームの音が聞こえることがあります。

では、そこから移動するときに WP7 ページを完全に強制終了する方法はありますか?

ありがとう。

アップデート:

シナリオは次のとおりです。

1- プレイヤーがゲームを開始します。2- ゲームが終了すると、プレーヤーは結果ページに移動します。3- プレーヤーが結果ページで戻るキーを押すと、次のように処理されます。

    protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
    {
        e.Cancel = true;
        NavigationService.Navigate(new Uri("/Pages/MainMenu.xaml", UriKind.Relative));
    }

4- 問題は、ゲーム ページに戻らないようにメイン メニューに移動するように指示しているにもかかわらず、ゲーム ページのコンストラクターが実行されることです。

4

1 に答える 1

2

ページを「殺す」方法はありません。順方向のナビゲーションを行っている場合、ページはバックグラウンドに残り (実行を継続)、戻るボタンを使用して戻ることができます。戻るナビゲーションを行っている場合、ページはある時点でガベージ コレクションされます (すべてのイベントのフックを解除し、管理されていないリソースを破棄したと仮定します)。

アップデート:

したがって、最初に指摘する必要があるのは、ここでユーザーを誤解させているということです。彼らは戻るボタンを押していますが、代わりに進むナビゲーションが行われています。これはその瞬間にユーザーを混乱させるだけでなく、MainMenu ページで [戻る] ボタンを押すとどうなるでしょうか? 結果ページに戻りますか (それがバックスタックの最後のページになります)? しかし、すでにバックスタックから迂回しているため、ユーザーが記憶している戻る道と最終的にどうなるかは、すでに異なっています。これは、送信が失敗する原因となるタイプのものです ( 5.2.4.1 – [戻る] ボタン: 前のページ)。

4 番に関しては、ページに戻ってもコンストラクターは呼び出されません。これは、ページが最初に作成されたときにのみ呼び出されます。一方、そのページへの後方または前方のナビゲーションは OnNavigatedTo メソッドを呼び出すため、そこでどのような作業が行われているかを確認してください。

両方の問題を解決するための私の推奨事項は次のとおりです。ゲームが終了し、ユーザーが結果ページに移動したら、NavigationService.RemoveBackEntry() を使用してバックスタックからゲーム ページを完全に削除します。これにより、ガベージ コレクターがページを取得できるようになり (ページへの参照を保持している他のオブジェクトがない場合 (上記を参照))、ユーザーが [戻る] ボタンを押したときにそのページがたどることがなくなります。 . 前のページが MainMenu ページである場合 (名前に基づいて、そうであると想定しています)、問題は解決されています。そうでない場合は、ナビゲーション パスを再考する時期かもしれません...

于 2012-12-30T17:33:32.273 に答える