0

簡単にするために、MainPage と Page2 を含む新しいアプリを作成します。MainPage には、Page2 に移動するボタンがあります。MainPage.OnBackKeyPress もオーバーライドします。

    protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
    {
        if (MessageBox.Show("Quit?", "Confirm", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel)
            e.Cancel = true;
        else
            base.OnBackKeyPress(e);
    }

Page2 は、Page2 から MainPage に戻るときの長時間の操作をシミュレートするために、オーバーライド OnNavigateFrom を除いて空です。

    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        System.Threading.Thread.Sleep(1000);
        base.OnNavigatedFrom(e);
    }

すべて問題ありませんが、ページ 2 で [戻る] キーを 3 ~ 4 回すばやく押すと、メッセージ ボックスが 2 回ポップアップ表示されます。メッセージボックスが表示されないか、少なくとも表示および非表示になると思います。私のコードに何か問題がありますか? ありがとう。

4

1 に答える 1

0

それはあなたが何を意味するかによります...

コードは問題ないように見えます (Thread.Sleepおそらく UI スレッドでの長い操作をシミュレートするためのものは別として)。

これは、UI スレッドがビジー (または「スリープ」) している間、戻るキーの押下がまだ登録されてアプリに送信されており、UI スレッドが再び利用可能になると、それらを次々に処理するためだと思います。

これは、UI スレッドをブロックしないようにする必要がある理由の良い例です。

于 2012-11-30T18:52:33.673 に答える