2011-08-01 30 views
0

我把其他一些樣本的代碼放在一起,我得到一個我不能理解的錯誤。在這條線在下面的代碼,這個詞觀察員,此代碼中報告的奇怪錯誤,請解釋一下嗎?

Dim Results As ManagementObjectCollection = Worker.Get(Observer) 

我得到的錯誤 「類型的值‘System.Management.ManagementOperationObserver’不能轉換爲‘整’」

有人能解釋這是什麼意思?

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 

感謝您的任何建議!

+0

'Worker.Get'看起來像什麼? – Oded

回答

2

我認爲使用引用類型來獲取結果並將其作爲參數發送到您發送的對象中。所以我認爲它只需要看起來像:

Worker.Get(Observer) 

而不是嘗試設置某些=因爲它不是一個函數返回一個值。

然後使用您連接到對象的事件來處理您需要對找到的項目執行的任何操作。

+0

非常感謝D,一旦你提到它,令人尷尬的顯而易見。 – TripleAntigen