В универсальном приложении 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