Partilhar via


Pesquisa assíncrona

O objeto Device Finder habilita pesquisas síncronas e assíncronas. Pesquisas assíncronas retornam o controle ao aplicativo de chamada imediatamente. Em seguida, o aplicativo é notificado sobre cada dispositivo individual como ele é encontrado, usando uma interface de retorno de chamada que o aplicativo registrou.

A pesquisa assíncrona é melhor para interfaces gráficas do usuário e aplicativos que executam monitoramento contínuo.

A estrutura geral de uma pesquisa assíncrona é:

  1. Criar um objeto de pesquisa
  2. Iniciar a pesquisa
  3. Receba notificações de retorno de chamada e execute as etapas de processamento apropriadas.
  4. Quando a pesquisa não for mais necessária, cancele a pesquisa e libere os objetos associados.

Observação

No código de retorno de chamada, um aplicativo não pode liberar o objeto sobre o qual está recebendo notificação, como um novo dispositivo, nem o aplicativo pode cancelar a pesquisa.

 

Exemplo de C++

Os aplicativos C++ devem implementar um objeto de retorno de chamada para passar para a pesquisa. Consulte Pesquisar de forma assíncrona no C++ para obter um código de exemplo que ilustra essa ação.

Exemplo de VBScript

O código VBScript deve passar o endereço da função de retorno de chamada.

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