2016-09-19 4 views
0

Ich versuche, diese Funktion zu laufen, dass Sie die% CPU-Auslastung (nicht Anwendung, global)über die CPU-Auslastung Funktion

Private Function USO_CPU() As Integer 
    Dim obj_WMI As Object, obj_INFO_CPU As Object, Porcentaje As Integer 

    obj_WMI = GetObject("winmgmts:").InstancesOf("Win32_Processor") 
    For Each obj_INFO_CPU In obj_WMI 
     If obj_WMI.Count > 1 Then 
      Porcentaje = Porcentaje + obj_INFO_CPU.LoadPercentage 
     Else 
      Porcentaje = obj_INFO_CPU.LoadPercentage 
     End If 
    Next 

    If obj_WMI.Count > 1 Then 
     Porcentaje = Porcentaje \ obj_WMI.Count 
     obj_WMI = Nothing 
     obj_INFO_CPU = Nothing 
    End If 

    USO_CPU = Porcentaje 
    Exit Function 

End Function 

Aber ich bekomme diese zeigt:

Nicht gefunden Ausnahme " System.InvalidCastException‘en Microsoft.VisualBasic.dll

Info: Umwandlung von 'DBNull' in 'Integer' nicht gültig

Ich weiß, dass der Fehler durch Variablentypen verursacht wird, aber ich habe versucht, "Porcentaje" als String, Integer usw. zu setzen und der Fehler bleibt bestehen.

Wie kann ich das beheben?

+0

Schalten Sie Option Strict und es wird nicht kompilieren – Plutonix

+0

Strict ist aus ... –

Antwort

0

Ihre Anfrage wird einige Null-Daten zurückkehren, dass Sie Ihre Datentyp konvertieren

Dim loadPerc = If(Convert.IsDBNull(obj_INFO_CPU.LoadPercentage), 0, Convert.ToInt32(obj_INFO_CPU.LoadPercentage)) 

---- ----- Update

For Each obj_INFO_CPU In obj_WMI 
    Dim loadPerc = If(Convert.IsDBNull(obj_INFO_CPU.LoadPercentage), 0, Convert.ToInt32(obj_INFO_CPU.LoadPercentage)) 

    If obj_WMI.Count > 1 Then 
     Porcentaje = Porcentaje + loadPerc 
    Else 
     Porcentaje = loadPerc 
    End If 
Next 
+0

Wo muss ich das setzen ?? thx –

+0

Ich habe meinen Beitrag bearbeitet, um zu demonstrieren – FloatingKiwi