如何在winforms应用程序中优雅地处理休眠/睡眠模式?

时间:2010-08-06 15:21:54

标签: c# .net winforms events hibernate-mode

我正在使用C#在.net中编写一个Windows窗体应用程序。

我遇到的问题是,如果我的程序在计算机进入睡眠和/或休眠状态时运行(我不确定此时哪一个,或两者都有,导致问题),当机器再次唤醒程序只是挂起。退出它的唯一方法是从任务管理器中终止进程。

由于显而易见的原因,这不是我希望程序运行的方式。即使我只是在程序进入这些状态时关闭程序,那也没关系,但我不太清楚如何做到这一点,或者是否有更优雅的方式来处理它。

3 个答案:

答案 0 :(得分:8)

你需要:

using Microsoft.Win32;   

这是代码:

 void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
    {
        if(e.Mode == PowerModes.Suspend)
        {
            this.GracefullyHandleSleep();
        }
    }

这就是我的用途。

答案 1 :(得分:6)

处理这些事件可能是一种解决方法。但在应用这种解决方法之前,我会尝试弄清楚当操作系统进入休眠状态时应用程序正在做什么。

虽然应用程序只是空闲,但发生了悬挂?

应用程序是否正在进行某种不应中断的低级别工作(与设备驱动程序或外部硬件通信)?

应用程序是否使用某种网络连接?

答案 2 :(得分:2)

article涵盖了对这些事件的监听。您必须执行覆盖WndProc之类的操作并侦听PBT_APMSUSPEND事件。