桌面上的UWP由顶部X按钮关闭 – 没有事件
在桌面上运行的UWP应用程序可以从顶部X按钮关闭,但它没有任何事件。 众所周知,在手机和平板电脑上,应用程序应该依赖Suspending
事件,无论它是如何触发的,然后应用程序应该依赖于ApplicationExecutionState
。
然而,这是一个(可能)常见的场景:在手机上Suspending
事件就足够了,如果正在进行Voip调用,它将在应用程序暂停后由OS操作。 在桌面上,用户希望关闭按钮完全关闭应用程序。 因此,如果正在进行呼叫,则应该挂起并且应该释放某些资源。
当(并且仅当)UWP应用程序在桌面上运行时,如何知道用户何时单击“关闭”按钮?
在Windows 10版本1703(版本10.0.15063)中添加了受限制的能力 confirmAppClose
,以便为应用程序提供拦截窗口关闭的function。
清单命名空间:
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
表现:
提交到商店时需要额外的批准。 但随后将在SystemNavigationManagerPreview实例上触发CloseRequested
事件。
码:
public MainPage() { this.InitializeComponent(); SystemNavigationManagerPreview.GetForCurrentView().CloseRequested += this.OnCloseRequest; } private void OnCloseRequest(object sender, SystemNavigationCloseRequestedPreviewEventArgs e) { if (!saved) { e.Handled = true; SomePromptFunction(); } }
你可以在这里做一些延迟工作(保存或提示),或者你可以将Handled
设置为true以阻止窗口关闭(用户取消提示)。
从官方页面了解应用程序生命周期:
没有特殊事件表明用户关闭了应用程序。
逐个用户行为:如果您的应用程序在用户关闭时需要执行与Windows关闭时不同的操作,您可以使用激活事件处理程序来确定应用程序是由用户还是由Windows终止。
因此,根据这一点, 没有(明确的)方法可以知道用户是否在应用程序关闭之前关闭了应用程序 ,但只有在重新启动之后才能关闭应用程序。 太糟糕了。
我使用Window.Current.Closed事件删除了我原来的答案,因为如果你只有一个Window实例它似乎不起作用。 还有CoreApplication.Exiting
,但从这个主题判断它也不起作用。 似乎是将来可能会修复的已知问题。 最后,似乎没有明确的方法来确定应用程序何时关闭,只有在它被暂停时。
但是,当应用程序关闭时, Window.Current
会触发VisibilityChanged事件。 问题是,当应用程序最小化时,它也会被触发,也可能在某些其他情况下被触发。 但我认为结合Suspending
你可以(或多或少)安全地确定桌面应用程序正在关闭。 好的是, VisibilityChanged
在Suspending
之前解雇了你可以保存它的值并在OnSuspending
处理程序中检查它,之后决定你是否需要进行任何清理或其他工作。