2016-08-16 3 views
-3

Я создаю приложение winform, используя perfmon. Я узнал, что состояние батареи не будет работать, потому что его часть управления окнами. Поэтому я решил пойти по маршруту wmi.Состояние батареи в winforms

Так что мой вопрос, когда я ставлю статус батареи в метке, как показано ниже:

private void BatteryStatus() 
    { 
     System.Management.ManagementClass wmi = new System.Management.ManagementClass("Win32_Battery"); 
     var allBatteries = wmi.GetInstances(); 

     foreach (var battery in allBatteries) 
     { 
      int estimatedChargeRemaining = Convert.ToInt32(battery["EstimatedChargeRemaining"]); 
      if (estimatedChargeRemaining == 100) 
      { 
       label13.Text = "Remaining:" + " " + estimatedChargeRemaining + " " + "%"; 
      } 
     } 



    } 

Заряд остальные показано прекрасно. Мой вопрос заключается в том, есть ли способ, которым у меня может быть только один if statement, чтобы назвать состояние батареи от 100 до 1

или как я это сделаю, мне нужно сделать еще 99 if statements?

Это часть моего монитора производительности. Я настраиваю здание. Было бы легче, если бы perfmon позволил счетчику. Это единственный способ, которым я могу думать, чтобы получить статистику батареи, такие как:

Charge Rate 
Discharge Rate 
Remaining Capacity 
Voltage 

Я всегда делал if statements с метками о состоянии батареи. Прежде чем я пойду на выполнение еще 993 if statements Я хочу быть уверенным, что нет более простого способа?

*********** Обновление ************ Я понял. Спасибо за помощь тем, кто помог.

+0

Почему вы думаете, что вам нужно, и если ? – Steve

+0

Я всегда использовал 'if statements' на ярлыках. Мне никогда не показывали другого пути, и большинство примеров, которые я исследовал, делает это с 'if statements', и за последние 5 лет я сделал это таким образом. Мне интересно, есть ли более простой способ. – campnerd

+0

В действительности нет причин для выражения 'if', здесь ... если вы не вызываете« BatteryStatus »при определенных обстоятельствах (что я даже не понимаю). – gravity

ответ

2

я вещь, что вы хотите сделать это:

private void BatteryStatus() 
{ 
    System.Management.ManagementClass wmi = new System.Management.ManagementClass("Win32_Battery"); 
    var allBatteries = wmi.GetInstances(); 

    foreach (var battery in allBatteries) 
    { 
     int estimatedChargeRemaining = Convert.ToInt32(battery["EstimatedChargeRemaining"]);   
     label13.Text = "Remaining:" + " " + estimatedChargeRemaining + " " + "%"; 
    } 
} 

Нет необходимости и if Постулаты, метка будет обновляться независимо от того, какой процент.

На второй части вопроса, вы говорите, что вы хотите, чтобы показать «состояние батареи», вы можете использовать if так:

private void BatteryStatus() 
{ 
    System.Management.ManagementClass wmi = new System.Management.ManagementClass("Win32_Battery"); 
    var allBatteries = wmi.GetInstances(); 

    foreach (var battery in allBatteries) 
    { 
     int estimatedChargeRemaining = Convert.ToInt32(battery["EstimatedChargeRemaining"]); 
     string Status = "";  
     if(estimatedChargeRemaining < 15) Status = "Critical"; 
     else if(estimatedChargeRemaining < 35) Status = "Low"; 
     else if(estimatedChargeRemaining < 60) Status = "Regular"; 
     else if(estimatedChargeRemaining < 90) Status = "High"; 
     else Status = "Complete"; 

     label13.Text = "Remaining:" + " " + estimatedChargeRemaining + " " + "% | Status: " + Status; 
    } 
} 
+0

ok делает это 'label13.Text = ratedChargeRemaining.ToString();' Я мог бы использовать 'label13.ForeColor = Color.Red; 'но использовать его как оператор if – campnerd

+0

Я понял это – campnerd

+1

Этот код и другие сообщения и OP не будут возвращать только данные из последней батареи в' allBatteries'. BTW case Case будет простым подходом к коду для нескольких уровней. – rheitzman

0
private void BatteryStatus() 
    { 
     System.Management.ManagementClass wmi = new System.Management.ManagementClass("Win32_Battery"); 
     var allBatteries = wmi.GetInstances(); 

     foreach (var battery in allBatteries) 
     { 
      int estimatedChargeRemaining = Convert.ToInt32(battery["EstimatedChargeRemaining"]); 
      label13.Text = "Remaining" + " " + estimatedChargeRemaining.ToString() + " " + "%"; 
      if (estimatedChargeRemaining < 15) 
      { 
       label13.ForeColor = Color.Red; 
      } 
     } 



    } 
Смежные вопросы