【发布时间】:2011-08-01 10:09:02
【问题描述】:
我将其他几个示例中的这段代码放在一起,但我遇到了一个我无法理解的错误。在下面代码的这一行,在 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
感谢您的建议!
【问题讨论】:
-
Worker.Get长什么样子?