Risparmio energia in Windows Form

Le applicazioni Windows Form possono sfruttare le funzionalità di risparmio energia disponibili nel sistema operativo Windows. Le applicazioni possono monitorare lo stato dell'alimentazione di un computer ed eseguire una determinata azione in caso di variazione di tale stato. Se ad esempio l'applicazione è in esecuzione su un computer portatile, è possibile disabilitare alcune funzionalità dell'applicazione quando il livello di carica della batteria scende al di sotto di una determinata soglia.

In .NET Framework è disponibile un evento PowerModeChanged che viene generato ogni volta che si verifica una variazione nello stato dell'alimentazione, ad esempio quando un utente sospende o ripristina il sistema operativo oppure quando lo stato dell'alimentazione CA o della batteria cambia. La proprietà PowerStatus della classe SystemInformation può essere utilizzata per eseguire una query sullo stato corrente, come illustrato nell'esempio di codice riportato di seguito.

Public Sub New()
    InitializeComponent()
    AddHandler Microsoft.Win32.SystemEvents.PowerModeChanged, AddressOf PowerModeChanged
End Sub

Private Sub PowerModeChanged(ByVal Sender As System.Object, ByVal e As Microsoft.Win32.PowerModeChangedEventArgs)
    Select Case SystemInformation.PowerStatus.BatteryChargeStatus
        Case BatteryChargeStatus.Low
            MessageBox.Show("Battery is running low.", "Low Battery", MessageBoxButtons.OK, _
                            System.Windows.Forms.MessageBoxIcon.Exclamation)
        Case BatteryChargeStatus.Critical
            MessageBox.Show("Battery is critically low.", "Critical Battery", MessageBoxButtons.OK, _
                            System.Windows.Forms.MessageBoxIcon.Stop)
        Case Else
            ' Battery is okay.
            Exit Select
    End Select
End Sub
public Form1()
{
    InitializeComponent();
    SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);
}

void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{
    switch (SystemInformation.PowerStatus.BatteryChargeStatus)
    {
        case System.Windows.Forms.BatteryChargeStatus.Low:
            MessageBox.Show("Battery is running low.", "Low Battery", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            break;
        case System.Windows.Forms.BatteryChargeStatus.Critical:
            MessageBox.Show("Battery is critcally low.", "Critical Battery", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            break;              
        default:
            // Battery is okay.
            break;
    }
}

Oltre alle enumerazioni BatteryChargeStatus, la proprietà PowerStatus contiene anche le enumerazioni per determinare la capacità della batteria (BatteryFullLifetime) e la percentuale di carica della batteria (BatteryLifePercent, BatteryLifeRemaining).

È possibile utilizzare il metodo SetSuspendState di Application per impostare il computer in modalità di ibernazione. Se l'argomento force è impostato su false, verrà trasmesso un evento a tutte le applicazioni che richiedono, per la sospensione, un'autorizzazione. Se l'argomento disableWakeEvent è impostato su true, verranno disabilitati automaticamente tutti gli eventi di riattivazione.

Nell'esempio di codice riportato di seguito viene illustrato come impostare un computer in modalità di ibernazione.

If SystemInformation.PowerStatus.BatteryChargeStatus = System.Windows.Forms.BatteryChargeStatus.Critical Then
    Application.SetSuspendState(PowerState.Hibernate, False, False)
End If
if (SystemInformation.PowerStatus.BatteryChargeStatus == System.Windows.Forms.BatteryChargeStatus.Critical)
{
    Application.SetSuspendState(PowerState.Hibernate, false, false);
}

Vedere anche

Riferimenti

PowerModeChanged

PowerStatus

SetSuspendState

SessionSwitch

Cronologia delle modifiche

Data

Cronologia

Motivo

Novembre 2010

Errori corretti nell'esempio di codice.

Commenti e suggerimenti dei clienti.