5

我想让用户决定他是否想在 Windows 关闭或注销时对我的应用程序执行最后一个请求。所以我正在使用“SessionEnding”事件。

以下代码被触发但不起作用。这是最简单的例子:

public App()
{
        this.SessionEnding += App_SessionEnding;
}

void App_SessionEnding(object sender, SessionEndingCancelEventArgs e)
{
        e.Cancel = true;
}

恐怕我以前在我的电脑上使用过一个 boost 程序(比如 CCleaner),并且不知何故它停用了这个事件。=O

当我将 MessageBox 添加到事件中并请求注销计算机时,会出现 MessageBox,但我没有时间单击某处,因为 1 秒后系统注销。系统似乎没有在等待我的申请。

观察者:我使用的是 Windows 7。

4

2 回答 2

1

我尝试了您的代码示例但没有成功......但是我将它放入我的主窗口中,导致应用程序关闭并且 MessageBox 无限期地显示,直到我单击关闭。这有帮助吗?

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
    {
        MessageBox.Show("Blah", "Blah", MessageBoxButton.OK);

        base.OnClosing(e);
    }
于 2013-09-29T16:18:24.883 回答
0

尝试覆盖已经存在的事件处理程序。

https://wpf.2000things.com/2011/01/25/197-override-application-class-methods-for-standard-events/

public partial class App : Application
{
        protected override void OnSessionEnding(SessionEndingCancelEventArgs e)
        {
            // Always call method in base class, so that the event gets raised.
            base.OnSessionEnding(e);

            // Place your own SessionEnding logic here
        }
}
于 2018-02-07T19:04:55.623 回答