2016-09-19 66 views
0

我試圖運行此功能,顯示你的%的CPU使用率(不應用,全球)關於CPU使用功能

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 

但我得到這個:

未發現異常「 System.InvalidCastException恩Microsoft.VisualBasic.dll中

信息:轉換 '的DBNull' 到 '整數' 無效

我知道錯誤是由變量類型引起的,但我試圖將「Porcentaje」設置爲String,Integer等,並且錯誤依然存在。

我該如何解決這個問題?

+0

打開選項嚴格,它不會編譯 – Plutonix

+0

嚴格關閉... –

回答

0

您的查詢返回了,你需要轉換到你的數據類型的一些空數據

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

---- -----更新

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

我必須把這個? thx –

+0

我編輯了我的帖子來演示 – FloatingKiwi