Приостановка события, не вызываемого с помощью WinRT
У меня проблема с приостановкой события на Windows Phone 8.1 с использованием WinRT, оно не запускается. Я не знаю почему. Это мой код:
/// <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
не работает
Есть идеи?
1 ответ
Событие приостановки не будет запускаться во время отладки (но при нормальном запуске приложения оно будет срабатывать сразу после выхода из приложения), как сказано также в этом блоге:
... вы будете ждать их вечно, даже если ваше приложение переключается назад и вперед на экран! Причина проста: пока приложение отлаживается, Windows не приостанавливает его.
Обратите внимание, что это может привести к некоторому странному поведению приложения, когда в событии Suspending что-то не так - например, если вы передаете какой-то сложный класс в метод Frame.Navigate и используете SuspensionManager. Во время отладки ваше приложение будет работать нормально (без приостановки), но завершится сбоем без режима отладки.
Чтобы проверить, как работает ваше приложение, вам придется вызвать мануалт Suspending, открыть (или сделать видимым) панель инструментов местоположения отладки в Visual Studio, там вы найдете выпадающий список событий Lifecyce, выберите там Suspend, а затем вернуть приложение - Resume,