2014-09-30 82 views
2

所以我的方法如下:調用PowerStatus.BatteryChargeStatus.ToString()有時會返回0

PowerStatus powerStatus = SystemInformation.PowerStatus; 

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

從我的測試系統,我收到了各種各樣的結果,如:

高,

低,

充電,

高充電

低,充電

低,關鍵

和繼承人的奇怪的... 0?

我想像它有事情做與BatteryChargeStatus Enum

+0

你的電池是平坦的:) – 2014-09-30 15:10:58

+0

那麼爲什麼你不檢查實際值返回,沒有ToString()? – RenniePet 2014-09-30 15:11:08

+1

...那是一些很棒的標誌值。未知包括所有其他狀態標誌! – Rawling 2014-09-30 15:17:33

回答

4

他們錯過了一個。從底層SYSTEM_POWER_STATUS操作系統聲明的文檔:

值是零,如果電池不充電,電池容量低,高

之間,正好彌補了自己,像:

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

好,我可以做的事情並不多,所以我的評論以上關於製造商搞砸是錯誤的。這個答案清楚地表明,問題是應該反映底層SYSTEM_POWER_STATUS操作系統聲明的枚舉定義缺少一個值。基礎標誌頂部的指定很差 - 0和255都是用於標誌的愚蠢值。 – RenniePet 2014-09-30 15:33:01

+0

輝煌的答案。謝謝! – user1 2014-09-30 15:35:57