电池等级c#

电池等级c#,c#,events,windows-8,batterylevel,C#,Events,Windows 8,Batterylevel,我有一个方法来确定电池电量,并保留了一个计时器来定期检查电池电量 void GetBatteryLevel() { try { //Use this code in next build //System.Windows.Forms.PowerStatus status = System.Windows.Forms.SystemInformation.PowerStatus;

我有一个方法来确定电池电量,并保留了一个计时器来定期检查电池电量

   void GetBatteryLevel()
    {
        try
        {
            //Use this code in next build
            //System.Windows.Forms.PowerStatus status = System.Windows.Forms.SystemInformation.PowerStatus;

            double batteryLevel;
            ManagementObjectSearcher mos = new ManagementObjectSearcher("select EstimatedChargeRemaining from Win32_Battery");
            ManagementObjectCollection collection = mos.Get();
            foreach (ManagementObject mo in collection)
            {
                UInt16 remainingPercent = (UInt16)mo["EstimatedChargeRemaining"];
                batteryLevel            = (double)remainingPercent;
                batteryLevel            = batteryLevel / 100;
                batteryLevel            = 1.0 - batteryLevel;
                BatteryLevel            = new System.Windows.Point(0.0, batteryLevel);
            }
        }
        catch (Exception exp)
        {
            Logger.LogMessage("EXCEPTION: " + exp.StackTrace);
        }
    }

当电池电量下降或增加1%时,是否有办法注册事件?我已经注册了SystemEvents.PowerModeChanged,效果很好。

简短回答来自.Net基类库编号

也就是说,有一些电源事件可用,但这些事件驻留在内核32中。Microsoft确实试图在SystemEvents类中为您提供这些事件中的某些事件的挂钩,但不幸的是,它们并没有与所有事件挂钩。查看电源管理API,没有一个事件会以您希望的方式跟踪电池

电源事件:

电源管理服务有一个名为GetSystemPowerStatus的方法,可以为您获取所需的信息。如果你对C++从.NET中工作的理解,你可以查询电池信息,当它改变你自己的事件时。 GetSystemPowerStatus:

您可能会作弊并使用一个从未添加到表单中的控件,即有一个复选框,您可以在其中更改其选中值。我不确定Android是否有其他方式提供电池电量降低/增加事件。Windows中必须有一种方法,计时器会根据间隔时间影响电池。我想既然你已经有了计时器,你可以在其中加入一个if语句,如果
batteryLevel
不同于
lastbertylevel
,就像我说的,可能有更好的方法。