私は定期的にバックグラウンドモードでいくつかの仕事をしているWindowsサービスを記述します。 そして、彼がこの作業をしているとき、私はコンピュータがスリープモードに自動的に移行するのを禁止すべきです。 CanHandlePowerEventをtrueに設定し、OnPowerEventメソッドをオーバーライドします。私はいくつかのPowerBroadcastStatusesを取得していますが、QuerySuspendは決してありません。 コンピュータがアイドル状態になってからPowerBroadcastStatus.Suspendを取得した後、私はPowerBroadcastStatus.QuerySuspendを取得する必要があります。私のサービスが彼の仕事に忙しい場合には、私はfalseを返してスリープ状態になりますモード。 なぜQuerySuspendは決して来ないのですか?WindowsサービスQuerySuspendは決して来ません
protected override bool OnPowerEvent(PowerBroadcastStatus powerStatus)
{
switch (powerStatus) {
case PowerBroadcastStatus.BatteryLow:
case PowerBroadcastStatus.OemEvent:
case PowerBroadcastStatus.PowerStatusChange:
case PowerBroadcastStatus.QuerySuspendFailed:
break;
case PowerBroadcastStatus.QuerySuspend: {
return MyProc.IsIdle;
break;
}
case PowerBroadcastStatus.ResumeAutomatic:
case PowerBroadcastStatus.ResumeCritical:
case PowerBroadcastStatus.ResumeSuspend:
Play();
break;
case PowerBroadcastStatus.Suspend:
Pause();
break;
}
return true;
}