2016-09-19 54 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