2015-12-20 2 views
0

У меня проблема с методами, вызванными событиями на странице для приложения Windows Phone 8.1. У меня есть четыре PivotItems на моей странице, которая каждый огнь метод (PivotX.Loaded += LEvents;), как это на Loaded:Прерывание всех событий на странице

private async void LEvents(object SENDER, RoutedEventArgs e) 
{ 
    // Download Data 
    // Extract Data 
    // Put Data in The GridViews (LOOP) 
} 

Но когда я покину эту страницу, и очистить кэш (чтобы страница расположена), методы по-прежнему запуская, вызывая конфликты и исключения. Очевидно, что размещение данных внутри GV не занимает много времени по сравнению с операциями загрузки и извлечения, поэтому мне нужно полностью остановить всю функцию.

Есть ли способ остановить все запущенные потоки, методы или события на странице, прежде чем утилизировать его?

Если нет, событие, останавливающее их по одному, представляет собой идею, но только stop их.

+0

Что вы подразумеваете под управлением методов? Есть ли у них какая-то петля внутри или что они делают? – Mino

+0

@ Мино: они просто асинхронны, у каждого из них есть внутри, да, но не бесконечный цикл. –

+0

У вас должен быть какой-то флаг прерывания (или токен отмены), который вы проверяете внутри своих циклов и выходите, если флаг установлен. – Enigmativity

ответ

1

Если вы подключаетесь к событиям, как это:

Loaded += Page_Loaded; 

, то вы можете отделить обработчик в OnNavigatedFrom() метод:

Loaded -= Page_Loaded; 

Как прерываю все запущенные потоки, созданные для этой страницы .. Мне неизвестно какое-либо соединение между создаваемыми потоками и страницей. Таким образом, вам придется управлять этим вручную - вместо вызова «Ожидать SomeAsyncMethod()» вам нужно будет получить задание, сохранить его в коллекции, а когда страница будет закрыта, повторить сбор и отменить любые задачи, которые не являются законченный. Что-то вроде этого:

Task task = SomeAsyncMethod(); 
task.Start(); 
tasks.Add(task); 
... 

OnNavigatedFrom() 
{ 
    foreach (var task in tasks) 
    { 
     if (!task.IsCancelled && !task.IsCompleted) 
      task.AsAsyncAction().Cancel(); 
    } 
} 

But I have not tested it and I do not guarantee this will work 
+0

Оканчивает ли этот метод индексированием? Это то, что я ищу. –

+0

Это * кажется *, чтобы решить проблему, спасибо большое! –

+0

Это не решение, асинхронные методы, похоже, не останавливаются на этом пути. –

 Смежные вопросы

  • Нет связанных вопросов^_^