会话结束事件不起作用

Posted

技术标签:

【中文标题】会话结束事件不起作用【英文标题】:Session Ending event not working 【发布时间】:2013-10-05 10:43:37 【问题描述】:

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

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

public App()

        this.SessionEnding += App_SessionEnding;


void App_SessionEnding(object sender, SessionEndingCancelEventArgs e)

        e.Cancel = true;

我担心我以前在我的电脑上使用过一个增强程序(比如 CCleaner),不知何故它停用了这个事件。 =O

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

Obs:我使用的是 Windows 7。

【问题讨论】:

这是您程序中的代码,还是您的实际代码中有 MessageBox? 上面的代码是最简单的例子。但我也尝试在“e.Cancel = true”之前调用 MessageBox.Show()。它显示了,但系统一直关闭。 试试你发布的代码,看看它是否有效。 Windows 不应等待您的 MessageBox 返回结果。我知道如果这样做我会很生气。 我确实尝试了我发布的代码。它没有用=D。 我正在与同样的问题作斗争。如果应用程序花费的时间太长并且异步部分有等待的东西,Windows 似乎只会杀死应用程序。 【参考方案1】:

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

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

        base.OnClosing(e);
    

【讨论】:

感谢您的尝试。我会考虑的。 不,它不起作用 =/。我运行该应用程序并在 Windows 上注销,但它不起作用。系统不等什么就简单注销了。 您是否有一个单独的主登录窗口。代码应该在关闭应用程序的窗口中 你的意思是当我在 Windows 上单击“注销”时你让它工作了吗?【参考方案2】:

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

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
        

【讨论】:

以上是关于会话结束事件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

结束会话,重置变量不起作用?

结束事件videojs不起作用

UISlider 的 editingDidEnd 事件在 iPad 中不起作用

UI 平移手势不起作用

PHP未设置会话不起作用

通过引用取消设置会话不起作用