Compartir a través de


Búsqueda asincrónica

El objeto Device Finder permite búsquedas sincrónicas y asincrónicas. Las búsquedas asincrónicas devuelven el control a la aplicación que realiza la llamada inmediatamente. A continuación, se notifica a la aplicación sobre cada dispositivo individual tal como se encuentra, mediante una interfaz de devolución de llamada que la aplicación ha registrado.

La búsqueda asincrónica es mejor para interfaces gráficas de usuario y aplicaciones que realizan la supervisión continua.

La estructura general de una búsqueda asincrónica es:

  1. Creación de un objeto de búsqueda
  2. Inicio de la búsqueda
  3. Recibir notificaciones de devolución de llamada y realizar los pasos de procesamiento adecuados.
  4. Cuando la búsqueda ya no sea necesaria, cancele la búsqueda y libere los objetos asociados.

Nota

En el código de devolución de llamada, una aplicación no puede liberar el objeto sobre el que recibe notificaciones, como un nuevo dispositivo, ni la aplicación puede cancelar la búsqueda.

 

Ejemplo de C++

Las aplicaciones de C++ deben implementar un objeto de devolución de llamada para pasar a la búsqueda. Consulte Buscar de forma asincrónica en C++ para obtener código de ejemplo que ilustra esta acción.

Ejemplo de VBScript

El código VBScript debe pasar la dirección de la función de devolución de llamada.

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