2016-09-19 4 views
0

Я пытаюсь запустить эту функцию, которая показывает использование% процессора (не приложения, глобальной)О функции использования 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' в 'Integer' не действительный

Я знаю, что ошибка вызвана переменными типами, но я попытался установить «Porcentaje» как String, Integer и т. Д., И ошибка сохраняется.

Как это исправить?

+0

Включите Option Strict и он не компилировать – 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