Ich schreibe Windows-Dienst, die regelmäßig einige Arbeit im Hintergrund-Modus. Und wenn er diese Arbeit macht, sollte ich Computer nicht automatisch in den Schlafmodus wechseln lassen. Ich setze CanHandlePowerEvent auf True und Override OnPowerEvent-Methode. Ich bekomme einige PowerBroadcastStatus, aber QuerySuspend niemals. Also, wenn der Computer im Leerlauf ist, dann bekomme ich nach einiger Zeit PowerBroadcastStatus.Suspend, aber ich erwarte, dass ich PowerBroadcastStatus.QuerySuspend bekommen sollte und für den Fall, dass mein Dienst mit seiner Arbeit beschäftigt ist, sollte ich false zurückgeben und den Computer nicht schlafen gehen lassen Modus. Warum QuerySuspend nie kommt?Windows-Dienst QuerySuspend kommt nie
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;
}