在WPF应用程序中捕获Windows关机事件

12

我有一个C# WPF应用程序,需要在关闭时保存数据。如果用户关闭程序,则Window Closing/Closed事件正常工作,但是如果用户注销/关闭计算机,则不会调用这些事件。

我已经找到了在WinForms程序中捕获此事件的方法(这里这里),但我无法弄清楚如何在WPF应用程序中实现此功能。

我正在尝试阻止关闭,直到我的程序准备好退出。

1个回答

16

有一个内置的事件 Application.SessionEnding - 当用户注销或关闭计算机时,就会触发此事件... 您只需要订阅该事件并将保存日期等代码放在其中即可。


那会完全阻止计算机关机,我正在尝试延迟关机直到我的程序准备好退出。抱歉,我应该在原始帖子中指明这一点。 - zaza
我并不是很理解...这个事件本身并没有什么作用...如果你的代码响应时间很长,那么Windows会询问用户是否要终止你的应用程序,而你无法真正阻止...你的应用程序在处理此事件时应该很快...你可以尝试告诉Windows不要关闭(在事件处理程序中设置e.Cancel = true;)... - Yahia
抱歉,这是我的误解。我以为在调用应用程序中的事件之前必须取消SessionEndingCancelEventArgs事件。你的解决方案完美地解决了这个问题。 - zaza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接