应用关闭时运行的代码

时间:2015-10-31 21:21:16

标签: c# win-universal-app

我发现了大量编写代码的示例,这些代码在WPF或Windows窗体应用程序终止时执行,但不适用于UWP应用程序。是否有可以覆盖的特殊C#方法,或者可以用来包含清理代码的事件处理程序?

这是我尝试的WPF代码,但在我的UWP应用程序中无效:

App.xaml.cs(没有样板使用和命名空间声明)

public partial class App : Application
{
        void App_SessionEnding(object sender, SessionEndingCancelEventArgs e)
        {
            MessageBox.Show("Sorry, you cannot log off while this app is running");
            e.Cancel = true;
        }
}

的App.xaml

<Application x:Class="SafeShutdownWPF.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:SafeShutdownWPF"
             StartupUri="MainWindow.xaml"
             SessionEnding="App_SessionEnding">
    <Application.Resources>

    </Application.Resources>
</Application>

我尝试使用Process.Exited,但VS2015无法识别System.Diagnostics内的进程。

1 个答案:

答案 0 :(得分:3)

对于UWP应用,您需要在Suspending对象上使用Application事件。如果您使用了默认项目模板,那么您应该已经定义了OnSuspending方法,您只需填写它即可。否则,在构造函数中订阅该事件:

public App()
{
    this.InitializeComponent();
    this.Suspending += OnSuspending;
}

该方法应该看起来像(使用延迟来允许异步编程):

private void OnSuspending(object sender, SuspendingEventArgs e)
{
    var deferral = e.SuspendingOperation.GetDeferral();
    //TODO: Save application state and stop any background activity
    deferral.Complete();
}