Freigeben über


Asynchrone Suche

Das Device Finder-Objekt ermöglicht synchrone und asynchrone Suchvorgänge. Asynchrone Suchvorgänge geben sofort die Steuerung an die aufrufende Anwendung zurück. Anschließend wird die Anwendung über jedes einzelne Gerät benachrichtigt, wie es gefunden wird, mithilfe einer Rückrufschnittstelle, die von der Anwendung registriert wurde.

Die asynchrone Suche eignet sich am besten für grafische Benutzeroberflächen und Anwendungen, die eine kontinuierliche Überwachung durchführen.

Die allgemeine Struktur einer asynchronen Suche lautet:

  1. Erstellen eines Suchobjekts
  2. Starten der Suche
  3. Erhalten Sie Rückrufbenachrichtigungen, und führen Sie die entsprechenden Verarbeitungsschritte aus.
  4. Wenn die Suche nicht mehr benötigt wird, brechen Sie die Suche ab, und lassen Sie die zugeordneten Objekte los.

Hinweis

Im Rückrufcode kann eine Anwendung das Objekt, über das sie Benachrichtigungen empfängt, z. B. ein neues Gerät, nicht freigeben, und die Anwendung kann die Suche auch nicht abbrechen.

 

C++-Beispiel

C++-Anwendungen müssen ein Rückrufobjekt implementieren, das an die Suche übergeben werden kann. Beispielcode, der diese Aktion veranschaulicht, finden Sie unter Asynchrone Suche in C++ .

VBScript-Beispiel

VBScript-Code muss die Adresse der Rückruffunktion übergeben.

Sub DeviceFinderCallback (device, UDN, calltype)

  select case calltype
    Case 0
      output = "Found: " & vbCrLf
      output = output & "DisplayName: " & device.FriendlyName & vbCrLf
      output = output & "Type: " & device.Type & vbCrLf
      output = output & "UDN: " & device.UniqueDeviceName & vbCrLf
      MsgBox output

    Case 1
      MsgBox "device removed: " & UDN

    Case 2
      MsgBox "search complete"

    end select
End Sub

Dim devicefinder
Dim findData

Set devicefinder = CreateObject("UPnP.UPnPDeviceFinder")

Sub StartFind()
  findData = devicefinder.CreateAsyncFind("upnp:rootdevice", 0, _
   GetRef("DeviceFinderCallback"))

  devicefinder.StartAsyncFind(findData)
End Sub

Sub StopFind()
  deviceFinder.CancelAsyncFind(findData)
End Sub