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:
- 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.)
- 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 |