Странная ошибка в этом коде, пожалуйста, объясните? - PullRequest
0 голосов
/ 01 августа 2011

Я собрал этот бит кода из нескольких других примеров, и я получаю ошибку, которую не могу понять. В этой строке кода ниже, на слове Observer,

Dim Results As ManagementObjectCollection = Worker.Get(Observer)

я получаю ошибку «Значение типа« System.Management.ManagementOperationObserver »не может быть преобразовано в« Integer »»

Может кто-нибудь объяснить, что это значит?

Есть две подписи для ManagementObjectSearcher.Get (), у одной нет параметров, а у другой - один параметр, ManagementOperationObserver для асинхронной операции. Это то, что я предоставляю, но ошибка указывает на преобразование с целым числом?

    Public Shared Sub WMIDriveDetectionASYNC(ByVal args As String())

        Dim Observer As New ManagementOperationObserver()
        Dim completionHandler As New MyHandler()
        AddHandler Observer.Completed, AddressOf completionHandler.Done

        Dim Machine = "192.168.0.15"
        Dim Scope = New ManagementScope("\\" & Machine & "\root\cimv2")
        Dim QueryString = "select Name, Size, FreeSpace from Win32_LogicalDisk where DriveType=3"
        Dim Query = New ObjectQuery(QueryString)
        Dim Worker = New ManagementObjectSearcher(Scope, Query)
        Dim Results As ManagementObjectCollection = Worker.Get(Observer) 'use parameter to make async 

        For Each item As ManagementObject In Results
            Console.WriteLine("{0} {2} {1}", item("Name"), item("FreeSpace"), item("Size"))
            Dim FullSpace As Long = (CLng(item("Size")) - CLng(item("FreeSpace"))) \ 1000000
            Console.WriteLine(FullSpace)
        Next

    End Sub

Public Class MyHandler
        Private _isComplete As Boolean = False

        Public Sub Done(sender As Object, e As CompletedEventArgs)
            _isComplete = True
        End Sub 'Done

        Public ReadOnly Property IsComplete() As Boolean
            Get
                Return _isComplete
            End Get
        End Property

End Class

Спасибо за любой совет!

1 Ответ

2 голосов
/ 01 августа 2011

Я думаю, что использует ссылочный тип, чтобы получить результат и поместить его в объект, который вы отправили в качестве параметра.Поэтому я думаю, что это просто должно выглядеть следующим образом:

Worker.Get(Observer)

вместо того, чтобы пытаться установить что-то =, так как это не функция, которая возвращает значение.

Затем используйте событияВы подключаетесь к объекту, чтобы справиться с тем, что вам нужно сделать с найденными предметами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...