Partager via


Recherche asynchrone

L’objet Device Finder active les recherches synchrones et asynchrones. Les recherches asynchrones retournent immédiatement le contrôle à l’application appelante. Ensuite, l’application est informée de chaque appareil individuel tel qu’il est trouvé, à l’aide d’une interface de rappel que l’application a inscrite.

La recherche asynchrone est idéale pour les interfaces utilisateur graphiques et les applications qui effectuent une surveillance continue.

La structure générale d’une recherche asynchrone est la suivante :

  1. Créer un objet de recherche
  2. Démarrer la recherche
  3. Recevez des notifications de rappel et effectuez les étapes de traitement appropriées.
  4. Lorsque la recherche n’est plus nécessaire, annulez la recherche et libérez les objets associés.

Notes

Dans le code de rappel, une application ne peut pas libérer l’objet pour lequel elle reçoit une notification, comme un nouvel appareil, et l’application ne peut pas non plus annuler la recherche.

 

Exemple C++

Les applications C++ doivent implémenter un objet de rappel à passer à la recherche. Consultez Recherche asynchrone en C++ pour obtenir un exemple de code illustrant cette action.

Exemple VBScript

Le code VBScript doit passer l’adresse de la fonction de rappel.

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