Что делать, если приложение UWP закрывается?

Иногда у меня есть открытый поток или активная очередь, которую нужно правильно обработать, когда приложение закрывается. В приложениях WPF я мог бы использовать событие Unloading для приложения, но в UWP я заметил, что такого события не существует.

Как мне сделать это надежно?

PS: я использую фреймворк Template 10.


person Jerry Nixon    schedule 31.10.2016    source источник


Ответы (1)


В универсальном приложении UWP единственный надежный способ узнать, что ваше приложение закрывается, — это подключиться к событию Suspending в классе приложения. Чтобы сделать это эффективно, вам нужно обработать событие и каким-то образом сообщить об этой операции в вашу модель представления, где вы можете закрыть свой поток или очистить свою очередь.

public App()
{
    this.InitializeComponent();
    this.Suspending += App_Suspending;
}

private void App_Suspending(Object sender, SuspendingEventArgs e)
{
    // close stream
}

В приложении Template 10 лучший способ сделать это — переопределить метод OnNavigatedFrom в вашей модели представления и посмотреть, истинен ли аргумент приостановки. Если да, то ваше приложение закрывается, и пришло время закрыть поток или очистить очередь. Не связывайтесь с классом приложения.

public override Task OnNavigatedFromAsync(IDictionary<String, Object> pageState, Boolean suspending)
{
    if (suspending)
    {
        // close stream
    }
    return base.OnNavigatedFromAsync(pageState, suspending);
}

В качестве альтернативы, если вы используете шаблон 10 без моделей представления, который поддерживается на 100%, класс приложения шаблона 10 предоставляет переопределение вместо события для обработки. Переопределите этот метод и закройте там поток.

public override Task OnSuspendingAsync(Object s, SuspendingEventArgs e, Boolean prelaunchActivated)
{
    // close stream
    return base.OnSuspendingAsync(s, e, prelaunchActivated);
}

Удачи.

person Jerry Nixon    schedule 31.10.2016
comment
Приостановка != закрытие - person lindexi; 02.11.2016
comment
@lindexi - я думаю, что первое предложение касается этого. Для разработчика разница с UWP довольно тонкая. - person Henk Holterman; 02.11.2016
comment
@lindexi, хоть ты и прав, ты тоже можешь ошибаться. Когда ваше приложение приостановлено, возникает событие Suspending. Когда ваше приложение закрывается, возникает событие Suspending. Не существует надежного способа различения. В результате вы должны относиться к приостановке как к закрытию. - person Jerry Nixon; 09.12.2016