Risparmio energia in Windows Form

Le applicazioni Windows Form possono sfruttare le funzionalità di risparmio energia nel sistema operativo Windows. Le applicazioni possono monitorare lo stato di alimentazione di un computer e intervenire quando si verifica una modifica dello stato. Ad esempio, se l'applicazione è in esecuzione in un computer portatile, è possibile disabilitare determinate funzionalità nell'applicazione quando la carica della batteria del computer è inferiore a un determinato livello.

.NET Framework fornisce un PowerModeChanged evento che si verifica ogni volta che si verifica una modifica dello stato di alimentazione, ad esempio quando un utente sospende o riprende il sistema operativo o quando lo stato dell'alimentazione AC o lo stato della batteria cambia. La PowerStatus proprietà della SystemInformation classe può essere utilizzata per eseguire una query sullo stato corrente, come illustrato nell'esempio di codice seguente.

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;
    }
}
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

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

È possibile utilizzare il SetSuspendState metodo di Application per inserire un computer in modalità di ibernazione o sospensione. Se l'argomento force è impostato su false, il sistema operativo trasmetterà un evento a tutte le applicazioni che richiedono l'autorizzazione per la sospensione. Se l'argomento disableWakeEvent è impostato su true, il sistema operativo disabilita tutti gli eventi di riattivazione.

Nell'esempio di codice seguente viene illustrato come inserire un computer in ibernazione.

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

Vedi anche