我发现了大量编写代码的示例,这些代码在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
内的进程。
答案 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();
}