如何取消任务?
Posted
技术标签:
【中文标题】如何取消任务?【英文标题】:How to cancel the task? 【发布时间】:2016-12-27 08:44:52 【问题描述】:我在我的应用程序中覆盖 BackButton 并显示 MessageDialog。
public Scenario_3()
this.InitializeComponent();
Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
private async void HardwareButtons_BackPresseed(object sender, BackPressedEventArgs e)
e.Handled = true;
var dialog = new MessageDialog("Do you want exit?");
dialog.Commands.Add(new Windows.UI.Popups.UICommand("yes") Id = 0 );
dialog.Commands.Add(new Windows.UI.Popups.UICommand("no") Id = 1 );
dialog.DefaultCommandIndex = 0;
dialog.CancelCommandIndex = 1;
var result = await dialog.ShowAsync();
if (result.Label == "yes")
this.Frame.Navigate(typeof(BlankPage1));
((Frame)Window.Current.Content).BackStack.Clear();
导航到 BlankPage1 后,如果按下 BackButton,我会再次看到 MessageDialog。 导航后如何取消此覆盖?
【问题讨论】:
如果没有好的minimal reproducible example 和更清晰的问题陈述,您的问题很难理解。但是,当您离开当前页面时,您似乎忘记了取消订阅BackPressed
事件。
您是否尝试过例如使用 flag 来检查您的按钮/方法是否曾被调用过?
彼得·杜尼霍,谢谢!您的建议解决了这个问题。
如果@Romasz 可以将他的评论作为答案发布,您可以将其标记为答案,这样更多寻找解决方案的人可以快速找到一个好的答案。
@TomášHübelbauer 如果没有从 OP 获得更多信息,很难在这里写出一个好的答案 - 如果他使用宽应用程序返回事件或仅针对特定页面 + 更多详细信息。彼得的建议似乎也解决了 OP 的问题。
【参考方案1】:
根据您对我评论的回复,您似乎只是在离开该页面时忘记取消订阅BackPressed
事件。这样做将确保仅在需要时调用事件处理程序。
例如:
private async void HardwareButtons_BackPresseed(object sender, BackPressedEventArgs e)
e.Handled = true;
var dialog = new MessageDialog("Do you want exit?");
dialog.Commands.Add(new Windows.UI.Popups.UICommand("yes") Id = 0 );
dialog.Commands.Add(new Windows.UI.Popups.UICommand("no") Id = 1 );
dialog.DefaultCommandIndex = 0;
dialog.CancelCommandIndex = 1;
var result = await dialog.ShowAsync();
if (result.Label == "yes")
// Leaving this page. Stop listening for Back button presses.
Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtons_BackPressed;
this.Frame.Navigate(typeof(BlankPage1));
((Frame)Window.Current.Content).BackStack.Clear();
【讨论】:
正确。即使您离开页面,它也会继续接收事件,直到它被 GCed。在NavigatedFrom
覆盖中取消订阅会更好,以防您以后添加代码以编程方式返回。以上是关于如何取消任务?的主要内容,如果未能解决你的问题,请参考以下文章
如何从另一个任务中取消 ScheduledFuture 任务并优雅地结束?