C#程序中防止PPC自动进入待机状态

 [DllImport("CoreDll.dll")]
      private static extern void SystemIdleTimerReset();

      private static int nDisableSleepCalls = 0;
      private static System.Threading.Timer preventSleepTimer = null;

      private static void PokeDeviceToKeepAwake(object extra)
        {
          try
          {
              SystemIdleTimerReset();
            }
          catch (Exception e)
          {
                // TODO
            }
      }
       
        /**//// <summary>
      /// 禁止设备自动关闭电源
        /// </summary>
      public static void DisableDeviceSleep()
      {
            nDisableSleepCalls++;
          if (nDisableSleepCalls == 1)
          {
              //Debug.Assert(preventSleepTimer == null);
                // 没隔30秒刷新一次计时器
              preventSleepTimer = new System.Threading.Timer(new System.Threading.TimerCallback

(PokeDeviceToKeepAwake),
                    null, 0, 30 * 1000);
            }
        }
        /**//// <summary>
        /// 允许设备自动关闭电源
        /// </summary>
        public static void EnableDeviceSleep()
        {
            nDisableSleepCalls--;
            if (nDisableSleepCalls == 0)
            {
                //Debug.Assert(preventSleepTimer != null);
                if (preventSleepTimer != null)
                {
                    preventSleepTimer.Dispose();
                    preventSleepTimer = null;
                }
          }
      }

        在定时开始时调用DisableDeviceSleep方法就OK了。
posted on 2010-05-11 15:01  米高佐敦  阅读(479)  评论(0编辑  收藏  举报