C# 调用PowerStatus.BatteryChargeStatus.ToString()有时返回0

C# 调用PowerStatus.BatteryChargeStatus.ToString()有时返回0,c#,battery,power-state,batterymanager,C#,Battery,Power State,Batterymanager,因此,我的方法如下: PowerStatus powerStatus = SystemInformation.PowerStatus; if (powerStatus.BatteryChargeStatus != BatteryChargeStatus.NoSystemBattery) { var batteryStatus = powerStatus.BatteryChargeStatus.ToString() } 从我的测试系统中,我得到了各种各样的结果,例如: 高, 低, 充电

因此,我的方法如下:

PowerStatus powerStatus = SystemInformation.PowerStatus;

if (powerStatus.BatteryChargeStatus != BatteryChargeStatus.NoSystemBattery)
{
    var batteryStatus = powerStatus.BatteryChargeStatus.ToString()
}
从我的测试系统中,我得到了各种各样的结果,例如:

高,

低,

充电

高电荷

低,充电

低的,关键的

这是奇怪的一个。。。0


我想这与他们错过了一个有关。从基础操作系统声明的文档中:

如果蓄电池未充电且蓄电池容量介于低和高之间,则该值为零

所以你只要自己做,比如:

    var status = SystemInformation.PowerStatus.BatteryChargeStatus;
    if (status != BatteryChargeStatus.NoSystemBattery) {
        var batteryStatus = status == 0 ? "Not charging" : status.ToString();
        // etc...
    }

你的电池没电了:)那么为什么不检查返回的实际值,而不使用ToString()?。。。这是一些很好的价值观。未知包括所有其他状态标志@Rawling我不明白你在说什么?@Rawling所说的是,标志样式的枚举应该只有二的幂的值。所以10=2+8=低+充电。但是值255对于flags样式的枚举来说太疯狂了-微软的某个人在为“未知”指定该值时犯了一个错误。好吧,所以我上面关于制造商搞砸了的评论是错误的。这个答案清楚地表明,问题在于,应该反映底层SYSTEM_POWER_STATUS操作系统声明的枚举定义缺少一个值。除了底层标志的指定非常糟糕之外,零和255都是愚蠢的标志值。答案很好。谢谢