我創建了一個需要處於安全狀態的應用程序,因此我想在後臺跟蹤計算機的電源狀態。如果電池電量(如果有的話)很低或很重要,我不會允許用戶繼續使用該應用程序並正確退出。C# - PowerStatus變化引發事件
首先,我驚訝的發現沒有這樣的事件來檢測變化。您需要始終手動檢查PowerStatus。
所以,我創建圍繞它的包裝,像這樣的東西:
using System;
using System.Windows.Forms;
namespace MyApp
{
internal static class BatteryManagement
{
//
internal static event EventHandler<EventArgs> Changed;
//
private static bool _started;
private static System.Threading.Timer _timer;
private static PowerStatus _previousPowerStatus;
internal static void Start()
{
if (!_started)
{
_started = true;
ManageBatteryLevel();
}
}
internal static void Stop()
{
if (_started)
{
if(_timer != null)
{
_timer.Dispose();
_timer = null;
}
_started = false;
}
}
private static void ManageBatteryLevel()
{
_previousPowerStatus = new PowerStatus();
TimeSpan dueTime = new TimeSpan(0, 0, 0); // Start right now
TimeSpan period = new TimeSpan(0, 1, 0); // Run every 1 minute
// Setting a timer that launch every period the OnBatteryLevelChange method
_timer = new System.Threading.Timer(OnBatteryLevelChange, null, dueTime, period);
}
private static void OnBatteryLevelChange(Object stateInfo)
{
PowerStatus powerStatus = new PowerStatus();
if (!_previousPowerStatus.Equals(powerStatus))
{
// Ensure battery level is up to date before raising event
_previousPowerStatus = powerStatus;
if (Changed != null)
{
Changed(null, EventArgs.Empty);
}
}
}
}
}
但不起作用,因爲電源狀態,還沒有任何公開的構造,我不能存儲先前的結果狀態...
我該如何管理?
謝謝...
這就是我尋找的原因!謝謝:) – 2011-03-21 14:04:42
@Arnaud:沒問題;) – w69rdy 2011-03-21 14:09:41