В моей программе я использую интерфейс WMI для запроса большого количества информации об оборудовании, на котором работает программа. Затем я беру эту информацию и помещаю ее в список, чтобы помочь с последующим ее отображением, но в настоящий момент ничего больше не делается. Этот метод до сих пор работал довольно хорошо, но есть одна серьезная проблема: иногда запрос / возвращает (еще не знаю, какой именно!) Nothing
и приводит к NullReferenceException
.
Теперь, очевидно, я могу обернуть это в Try / Catch и быть на моем веселом пути. Однако я хотел бы избежать этого, потому что я буду запрашивать сотни битов информации, и сотни из них могут привести к исключению. Это просто неаккуратное программирование, которое значительно замедляет мою программу!
Мои вопросы: что я проверяю, чтобы использовать If
вместо Try
? Ниже я приведу свой текущий код, а затем перечислю решения, которые уже пробовал.
Public Shared Function GetSomeInfo() As List(Of String)
Dim ret As New List(Of String)
Dim sq As New Management.SelectQuery("Win32_Processor")
Dim mos As New Management.ManagementObjectSearcher(sq)
For Each info As Management.ManagementObject In mos.Get()
ret.Add(TryQuery(info, "Name"))
ret.Add(TryQuery(info, "Caption")) 'this query may result in Nothing somewhere...
Next
Return ret
End Function
Private Shared Function TryQuery(ByRef info As
Management.ManagementObject, ByVal strID As String) As String
Try
Return strID & ": " & info(strID).ToString 'exception obviously thrown here...but WHERE?
Catch ex As NullReferenceException
Return String.Empty
Catch ex As Management.ManagementException
Return String.Empty
End Try
End Function
Итак, вот что я попробовал, чтобы попытаться обойти это, используя Try
:
If Not info Is Nothing Then ...
Все еще привело к неисследованному исключению
If Not info(strID) Is Nothing Then ...
Еще где-то есть исключение
If Not info.Equals(Nothing) Then ...
Отчаяние
If Not Info(strID).ToString Is Nothing ...
: (
Я просто не знаю , где , чтобы проверить, выбрасывает ли это исключение в запросе WMI. Любое понимание будет оценено. Спасибо!