Windows runtime 如何检测用户是否已关闭winrt应用程序
什么是可靠(立即)检测用户是否已使用ALT-F4或关闭手势关闭应用程序的方法?根据文档,无法检测此事件(请参阅“应用程序关闭”下的部分)。使用该类可以最好地管理这种状态。这不是对我的具体问题的确切回答,而是解决我的具体问题的方法,我发布了我的问题。也许它能帮助其他人: 注册到Windows runtime 如何检测用户是否已关闭winrt应用程序,windows-runtime,windows-store-apps,Windows Runtime,Windows Store Apps,什么是可靠(立即)检测用户是否已使用ALT-F4或关闭手势关闭应用程序的方法?根据文档,无法检测此事件(请参阅“应用程序关闭”下的部分)。使用该类可以最好地管理这种状态。这不是对我的具体问题的确切回答,而是解决我的具体问题的方法,我发布了我的问题。也许它能帮助其他人: 注册到Window.CoreWindow.VisibilityChanged: Window.Current.CoreWindow.VisibilityChanged += CoreWindow_VisibilityChanged
Window.CoreWindow.VisibilityChanged
:
Window.Current.CoreWindow.VisibilityChanged += CoreWindow_VisibilityChanged;
如果可见性已更改为false,则这可能是由于应用程序关闭所致。请注意,事件还将因许多其他原因触发,例如通过ALT Tab更改窗口:
void CoreWindow_VisibilityChanged(CoreWindow sender, VisibilityChangedEventArgs args) {
if(!args.Visible){
// Action here
}
}
请注意:我怀疑微软没有明确提供我正在寻找的事件,因为在用户关闭应用程序的那一刻进行繁重的操作会导致用户体验不那么流畅。然而,我认为在一些符合条件的情况下,这样的事件是有意义的,因此人们会使用我在这里提供的解决方法。如果使用此解决方案或其他解决方案,请注意不要给系统造成沉重的负载。毫无疑问,在应用程序挂起的情况下,您不希望一直保存状态。这不叫“投票”(在其他方面有点糟糕和浪费)吗?在我的场景中,我有一个计时器来跟踪剩余时间,这是应用程序状态的一部分,但我不想在每个滴答声中都存储这个 因此,要正确执行此操作,您需要:
public void MyPage() // Constructor
{
Loaded += (sender, e) =>
{
if(!m_isLoaded)
{
m_isLoaded = true;
Window.Current.CoreWindow.VisibilityChanged +=
OnVisibilityChanged;
}
};
Unloaded += async (sender, e) =>
{
if (m_isLoaded)
{
m_isLoaded = false;
Window.Current.CoreWindow.VisibilityChanged -=
OnVisibilityChanged;
await SaveStuff();
}
};
}
protected void OnVisibilityChanged(object sender,
Windows.UI.Core.VisibilityChangedEventArgs e)
{
if (!e.Visible && m_isLoaded)
{
var dontAwait = SaveStuff();
}
}
// Called whenever the page is unloaded and state needs to be saved.
protected async Task SaveStuff()
{
await ThreadUtility.voidTask();
}
// Set to false when the page is unloaded (paused).
private bool m_isLoaded = false;
你的意思是在用户关闭代码后运行代码?@SLaks,是的,直接在用户关闭代码后,在系统引发挂起事件之前,两者之间有区别吗?@Filip:后者在十秒钟后调用。真的吗?有趣。它到底改变了什么?我不得不同意这个答案。但是,我发现您还需要使用unload事件,否则您可能会发现自己正在保存旧页面的状态。我将添加注释作为可读性的答案。而不是Windows.UI.Xaml.Window.Current.VisibilityChanged