Compartilhar via


Declaração de dispositivo de ponto de serviço e modelo de ativação

Use a declaração de dispositivo do Ponto de Serviço e habilite as APIs para reivindicar dispositivos e habilitá-los para operações de E/S.

Reivindicando para uso exclusivo

Depois de criar um objeto de dispositivo PointOfService, você deve reivindicá-lo usando o método de declaração apropriado para o tipo de dispositivo antes de poder usar o dispositivo para entrada ou saída. A declaração concede ao aplicativo acesso exclusivo a muitas das funções do dispositivo para garantir que um aplicativo não interfira no uso do dispositivo por outro aplicativo. Apenas um aplicativo por vez pode reivindicar um dispositivo PointOfService para uso exclusivo.

Observação

A ação de declaração estabelece um bloqueio exclusivo para um dispositivo, mas não o coloca em um estado operacional. Consulte Habilitar dispositivo para operações de E/S para obter mais informações.

APIs usadas para reivindicar/liberar

Dispositivo Declaração Versão
BarcodeScanner BarcodeScanner.ClaimScannerAsync ReivindicadoBarcodeScanner.Fechar
CashDrawer Gaveta de Dinheiro.ClaimDrawerAsync ReivindicadoCashDrawer.Fechar
LineDisplay LineDisplay.ClaimAsync ReivindicadoDisplay.Fechar
Leitor de tarja magnética MagneticStripeReader.ClaimReaderAsync ReivindicadoMagneticStripeReader.Fechar
PosPrinter PosPrinter.ClaimPrinterAsync ReivindicadoPosPrinter.Fechar

Habilitar dispositivo para operações de E/S

A ação de reivindicação estabelece direitos exclusivos sobre o dispositivo, mas não o coloca em um estado operacional. Para receber eventos ou executar qualquer operação de saída, você deve habilitar o dispositivo usando EnableAsync. Por outro lado, você pode chamar DisableAsync para parar de ouvir eventos do dispositivo ou parar de executar a saída. Você também pode usar IsEnabled para determinar o estado do seu dispositivo.

APIs usadas habilitar/desabilitar

Dispositivo Habilitar Desabilitar IsEnabled?
ClaimedBarcodeScanner EnableAsync DesabilitarAssíncrono IsEnabled
ClaimedCashDrawer EnableAsync DesabilitarAssíncrono IsEnabled
ClaimedLineDisplay Não aplicável¹ Não aplicável¹ Não aplicável¹
ClaimedMagneticStripeReader EnableAsync DesabilitarAssíncrono IsEnabled
ClaimedPosPrinter EnableAsync DesabilitarAssíncrono IsEnabled

¹ A exibição de linha não exige que você habilite explicitamente o dispositivo para operações de E/S. A habilitação é executada automaticamente pelas APIs PointOfService LineDisplay que executam E/S.

Exemplo de código: reivindicar e habilitar

Este exemplo mostra como reivindicar um dispositivo de leitor de código de barras depois de criar com êxito um objeto de leitor de código de barras.


    BarcodeScanner barcodeScanner = await BarcodeScanner.FromIdAsync(DeviceId);

    if(barcodeScanner != null)
    {
        // after successful creation, claim the scanner for exclusive use 
        claimedBarcodeScanner = await barcodeScanner.ClaimScannerAsync();

        if(claimedBarcodeScanner != null)
        {
            // after successful claim, enable scanner for data events to fire
            await claimedBarcodeScanner.EnableAsync();
        }
        else
        {
            Debug.WriteLine("Failure to claim barcodeScanner");
        }
    }
    else
    {
        Debug.WriteLine("Failure to create barcodeScanner object");
    }
    

Aviso

Um sinistro pode ser perdido nas seguintes circunstâncias:

  1. Outro aplicativo solicitou uma declaração do mesmo dispositivo e seu aplicativo não emitiu um RetainDevice em resposta ao evento ReleaseDeviceRequested . (Veja Negocie a reivindicação abaixo para obter mais informações.)
  2. Seu aplicativo foi suspenso, o que resultou no fechamento do objeto do dispositivo e, como resultado, a declaração não é mais válida. (Veja Ciclo de vida do objeto do dispositivo para obter mais informações.)

Negociação de sinistros

Como o Windows é um ambiente multitarefa, é possível que vários aplicativos no mesmo computador exijam acesso a periféricos de maneira cooperativa. As APIs PointOfService fornecem um modelo de negociação que permite que vários aplicativos compartilhem periféricos conectados ao computador.

Quando um segundo aplicativo no mesmo computador solicita uma declaração para um periférico PointOfService que já foi reivindicado por outro aplicativo, uma notificação de evento ReleaseDeviceRequested é publicada. O aplicativo com a declaração ativa deve responder à notificação de evento chamando RetainDevice se o aplicativo estiver usando o dispositivo no momento para evitar a perda da declaração.

Se o aplicativo com a declaração ativa não responder com RetainDevice imediatamente, supõe-se que o aplicativo foi suspenso ou não precisa do dispositivo e a declaração será revogada e fornecida ao novo aplicativo.

A primeira etapa é criar um manipulador de eventos que responda ao evento ReleaseDeviceRequested com RetainDevice.

    /// <summary>
    /// Event handler for the ReleaseDeviceRequested event which occurs when 
    /// the claimed barcode scanner receives a Claim request from another application
    /// </summary>
    void claimedBarcodeScanner_ReleaseDeviceRequested(object sender, ClaimedBarcodeScanner myScanner)
    {
        // Retain exclusive access to the device
        myScanner.RetainDevice();
    }

Em seguida, registre o manipulador de eventos em associação com seu dispositivo reivindicado

    BarcodeScanner barcodeScanner = await BarcodeScanner.FromIdAsync(DeviceId);

    if(barcodeScanner != null)
    {
        // after successful creation, claim the scanner for exclusive use 
        claimedBarcodeScanner = await barcodeScanner.ClaimScannerAsync();

        if(claimedBarcodeScanner != null)
        {
            // register a release request handler to prevent loss of scanner during active use
            claimedBarcodeScanner.ReleaseDeviceRequested += claimedBarcodeScanner_ReleaseDeviceRequested;

            // after successful claim, enable scanner for data events to fire
            await claimedBarcodeScanner.EnableAsync();          
        }
        else
        {
            Debug.WriteLine("Failure to claim barcodeScanner");
        }
    }
    else
    {
        Debug.WriteLine("Failure to create barcodeScanner object");
    }

APIs usadas para negociação de declarações

Dispositivo reivindicado Notificação de lançamento Reter dispositivo
ClaimedBarcodeScanner ReleaseDeviceRequested Reter dispositivo
ClaimedCashDrawer ReleaseDeviceRequested Reter dispositivo
ClaimedLineDisplay ReleaseDeviceRequested Reter dispositivo
ClaimedMagneticStripeReader ReleaseDeviceRequested Reter dispositivo
ClaimedPosPrinter ReleaseDeviceRequested Reter dispositivo