C# 如何从Windows Phone上的任务切换程序中删除我的应用程序? 我有一个通用的Windows手机应用程序(从空白应用程序模板开始)由主页和三个辅助页面组成。它们之间的导航工作正常(部分原因是)
我遇到的问题是,在主页上,当用户按下“硬件后退”按钮时,我的应用程序被放在后台,但我的应用程序卡仍保留在任务切换器中。无论是否附加了调试器,都会发生这种情况 我在一个基于Pivot App(WP)模板的新项目中尝试了这一点,我发现了同样的问题C# 如何从Windows Phone上的任务切换程序中删除我的应用程序? 我有一个通用的Windows手机应用程序(从空白应用程序模板开始)由主页和三个辅助页面组成。它们之间的导航工作正常(部分原因是),c#,xaml,windows-runtime,windows-phone-8.1,win-universal-app,C#,Xaml,Windows Runtime,Windows Phone 8.1,Win Universal App,我遇到的问题是,在主页上,当用户按下“硬件后退”按钮时,我的应用程序被放在后台,但我的应用程序卡仍保留在任务切换器中。无论是否附加了调试器,都会发生这种情况 我在一个基于Pivot App(WP)模板的新项目中尝试了这一点,我发现了同样的问题 我想在用户从主页按返回键时“关闭”我的应用程序,这样它就不再位于任务切换程序中。是否需要手动执行某些操作?您可以使用Application.Current.exit()退出应用程序;在下面的硬件按钮功能中,按下按钮 public MainPage() {
我想在用户从主页按返回键时“关闭”我的应用程序,这样它就不再位于任务切换程序中。是否需要手动执行某些操作?您可以使用Application.Current.exit()退出应用程序;在下面的硬件按钮功能中,按下按钮
public MainPage()
{
Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
/* When you don't know the namespace you can use this code instead of the lower
string[] Namespace = Frame.CurrentSourcePageType.FullName.Split('.');
if (!e.Handled && Frame.CurrentSourcePageType.FullName == Namespace[0] + ".MainPage")
Application.Current.Exit();
*/
if (!e.Handled && Frame.CurrentSourcePageType.FullName == "NAMESPACE.MainPage")
Application.Current.Exit();
}
我希望这能奏效
问候,,
Christian这就是我最终实现它的方式,使用来自user2799780和Romasz的指针,尽管我不能100%确定我没有双重(取消)注册处理程序。我想,这取决于每个导航到是否都有一个导航自 编辑:有人提醒我(请参阅注释),在挂起时,应用程序会收到OnNavigatedFrom事件,但在恢复时,它不会看到OnNavigatedTo事件,从而导致处理程序在这种情况下无法注册以下实现可能受此错误影响
不,我的意思是,你必须确保几件事:当你不想退出应用程序时取消订阅(使用标志?),防止多次订阅,并且你还应该检查事件之前是否未
e.handled=true
。这些都取决于你的应用程序。也许你可以将全名拆分为名称空间和页面名称。那么你只需要知道一个名字。如下所示:string[]Namespace=Frame.CurrentSourcePageType.FullName.Split('.');如果(!e.Handled&&Frame.CurrentSourcePageType.FullName==命名空间[0]+“.MainPage”)应用程序.Current.Exit()
不需要比较字符串,只需执行此操作Frame.CurrentSourcePageType==typeof(MainPage)
当您的应用程序在MainPage中挂起然后恢复时会出现问题-OnNavigatedTo未触发,因此您的事件不会再次订阅-您的应用程序不会退出。再次感谢Romasz。我说,这个导航/生命周期可以简单得多。我将编辑我的答案,以指向您评论中突出显示的错误,但我将保留代码以显示SDK中的陷阱。我不会将其称为错误-因此它在文档中,可能是故意的。但如果你不知道的话,这是一个很好的陷阱。我指的是我实现答案时的错误。:)是的,该休息了……;)
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
// When we're on this page, pressing Back should close the app
Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
protected override async void OnNavigatedFrom(NavigationEventArgs e)
{
// When we leave this page, pressing Back should no longer close the app
Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtons_BackPressed;
}
private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
if (!e.Handled)
{
Application.Current.Exit();
}
}