web-dev-qa-db-ja.com

WinRTを使用して発生していない一時停止イベント

WinRTを使用したWindows Phone 8.1でのイベントの中断に問題がありますが、イベントが起動しません。理由はわかりません。これは私のコードです:

_/// <summary>
/// Initializes the singleton application object. This is the first line of authored code
/// executed, and as such is the logical equivalent of main() or WinMain().
/// </summary>
public App()
{
    InitializeComponent();

    Suspending += OnSuspending;
#if DEBUG
    this.displayRequest = new DisplayRequest();
#endif
}

/// <summary>
/// Invoked when application execution is being suspended. Application state is saved
/// without knowing whether the application will be terminated or resumed with the contents
/// of memory still intact.
/// </summary>
/// <param name="sender">
/// The source of the suspend request.
/// </param>
/// <param name="e">
/// Details about the suspend request.
/// </param>
private void OnSuspending(object sender, SuspendingEventArgs e)
{
    var deferral = e.SuspendingOperation.GetDeferral();
    deferral.Complete();
}
_

var deferral = e.SuspendingOperation.GetDeferral();にブレークポイントを設定し、Visual Studioでデバッグしました。次に、電話のスタートボタンを押して別のアプリを実行し、約10秒間待機しました。 OnSuspendingが実行されていません。

何か案は?

35
UltimaWeapon

デバッグ中は一時停止イベントは発生しません(ただし、通常のアプリの実行中は、アプリから移動した直後に発生します) this blog

...アプリが画面に切り替えられても、これらがトリガーされるまで永遠に待機します。その理由は簡単です。アプリがデバッグされている間、Windowsはそれを中断しません。

これは、Suspendingイベントに問題がある場合、たとえば、Frame.Navigateメソッドを使用し、SuspensionManagerを使用します。アプリのデバッグ中は問題なく動作しますが(中断なし)、デバッグモードなしではクラッシュします。

アプリの動作をテストするには、invokeSuspendingを呼び出す必要がありますmanuallt、開く(または表示設定)デバッグ場所ツールバーをVisual Studioに表示すると、Lifecyceイベントのドロップダウンが表示され、そこから選択します Suspend、次にアプリを返すには- Resume

enter image description here

64
Romasz