中断页面中的所有事件
本文关键字:事件 中断 | 更新日期: 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