【问题标题】:Calling PowerStatus.BatteryChargeStatus.ToString() sometimes returns 0调用 PowerStatus.BatteryChargeStatus.ToString() 有时会返回 0
【发布时间】:2014-09-30 15:06:06
【问题描述】:

所以我的方法如下:

PowerStatus powerStatus = SystemInformation.PowerStatus;

if (powerStatus.BatteryChargeStatus != BatteryChargeStatus.NoSystemBattery)
{
    var batteryStatus = powerStatus.BatteryChargeStatus.ToString()
}

从我的测试系统中,我得到了各种各样的结果,例如:

高,

低,

充电,

高充电

电量低,正在充电

低,严重

这是奇怪的... 0?

我想这与BatteryChargeStatus Enum有关

【问题讨论】:

  • 你的电池没电了:)
  • 那么为什么不检查返回的实际值,而不使用 ToString()?
  • ...那里有一些出色的标志值。未知包括所有其他状态标志!
  • @Rawling 我不明白你在说什么?
  • @Rawling 所说的是标志样式的枚举应该只具有 2 的幂的值。所以 10 = 2 + 8 = 低 + 充电。但是值 255 对于标志样式的枚举来说太疯狂了——微软的某个人在为“未知”指定该值时犯了一个错误。

标签: c# battery power-state batterymanager


【解决方案1】:

他们错过了一个。来自底层SYSTEM_POWER_STATUS 操作系统声明的文档:

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

所以你自己编吧,比如:

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

【讨论】:

  • 好的,所以我上面关于制造商搞砸的评论是错误的。这个答案清楚地表明,问题在于应该反映底层 SYSTEM_POWER_STATUS 操作系统声明的枚举定义缺少一个值。除了底层标志的指定非常差之外 - 零和 255 都是用于标志的愚蠢值。
  • 绝妙的答案。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多