中断页面中的所有事件

本文关键字:事件 中断 | 更新日期: 2023-09-27 18:27:34

我对Windows Phone 8.1应用程序页面中事件调用的方法有问题。我的页面中有四个数据透视项,每个数据透视项都在Loaded:上激发一个类似这样的方法(PivotX.Loaded += LEvents;

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

但是,当我离开该页面并清除缓存(这样页面就被释放了)时,这些方法仍在运行,从而导致冲突和异常。显然,与下载和提取操作相比,将数据放入GV并不需要花费太多时间,因此我需要以强有力的方式停止整个功能。

有没有办法在处理页面之前停止页面上所有正在运行的线程、方法或事件?

如果没有,则事件逐个停止它们是一个想法,但只是停止它们。

中断页面中的所有事件

如果您连接到这样的事件:

  Loaded += Page_Loaded;

然后您可能想要分离OnNavigatedFrom()方法中的处理程序:

  Loaded -= Page_Loaded;

至于中断为此页面启动的所有正在运行的线程。。我不知道创建的线程和页面之间有任何连接。因此,您必须手动管理它,而不是调用"wait 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