Compartir a través de


Notificación de dispositivo de punto de servicio y habilitación del modelo

Use la notificación de dispositivo de punto de servicio y habilite las API para reclamar dispositivos y habilitarlas para las operaciones de E/S.

Reclamación de uso exclusivo

Después de crear un objeto de dispositivo PointOfService, debe reclamarlo mediante el método de notificación adecuado para el tipo de dispositivo antes de poder usar el dispositivo para la entrada o salida. La notificación concede a la aplicación acceso exclusivo a muchas de las funciones del dispositivo para asegurarse de que una aplicación no interfiere con el uso del dispositivo por otra aplicación. Solo una aplicación a la vez puede reclamar un dispositivo PointOfService para su uso exclusivo.

Nota:

La acción de notificación establece un bloqueo exclusivo en un dispositivo, pero no lo coloca en un estado operativo. Consulte Habilitación del dispositivo para operaciones de E /S para obtener más información.

API usadas para reclamar o liberar

Dispositivo Notificación Versión
BarcodeScanner BarcodeScanner.ClaimScannerAsync ClaimedBarcodeScanner.Close
CashDrawer CashDrawer.ClaimDrawerAsync Claimed CashDrawer.Close
LineDisplay LineDisplay.ClaimAsync ClaimedineDisplay.Close
MagneticStripeReader MagneticStripeReader.ClaimReaderAsync ClaimedMagneticStripeReader.Close
PosPrinter PosPrinter.ClaimPrinterAsync ClaimedPosPrinter.Close

Habilitación del dispositivo para operaciones de E/S

La acción de notificación establece derechos exclusivos para el dispositivo, pero no lo pone en un estado operativo. Para recibir eventos o realizar cualquier operación de salida, debe habilitar el dispositivo mediante EnableAsync. Por el contrario, puede llamar a DisableAsync para dejar de escuchar eventos desde el dispositivo o dejar de realizar la salida. También puede usar IsEnabled para determinar el estado del dispositivo.

API usadas para habilitar o deshabilitar

Dispositivo Habilitar Disable ¿IsEnabled?
ClaimedBarcodeScanner EnableAsync DisableAsync IsEnabled
ClaimedCashDrawer EnableAsync DisableAsync IsEnabled
ClaimedLineDisplay No aplicable¹ No aplicable¹ No aplicable¹
ClaimedMagneticStripeReader EnableAsync DisableAsync IsEnabled
ClaimedPosPrinter EnableAsync DisableAsync IsEnabled

¹ La pantalla de línea no requiere que habilite explícitamente el dispositivo para las operaciones de E/S. La habilitación se realiza automáticamente mediante las API PointOfService LineDisplay que realizan E/S.

Ejemplo de código: notificación y habilitación

En este ejemplo se muestra cómo reclamar un dispositivo de escáner de códigos de barras después de haber creado correctamente un objeto de escáner 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");
    }
    

Advertencia

Una notificación se puede perder en las siguientes circunstancias:

  1. Otra aplicación ha solicitado una notificación del mismo dispositivo y la aplicación no emitió un retainDevice en respuesta al evento ReleaseDeviceRequested . (Consulte Negociación de notificaciones a continuación para obtener más información).
  2. La aplicación se ha suspendido, lo que dio lugar a que el objeto de dispositivo se cerrara y, como resultado, la notificación ya no es válida. (Consulte Ciclo de vida de objetos de dispositivo para obtener más información).

Negociación de notificaciones

Dado que Windows es un entorno de tareas múltiples, es posible que varias aplicaciones del mismo equipo requieran acceso a periféricos de forma cooperativa. Las API PointOfService proporcionan un modelo de negociación que permite que varias aplicaciones compartan periféricos conectados al equipo.

Cuando una segunda aplicación del mismo equipo solicita una notificación para un periférico PointOfService que ya está reclamado por otra aplicación, se publica una notificación de eventos ReleaseDeviceRequested . La aplicación con la notificación activa debe responder a la notificación de eventos llamando a RetainDevice si la aplicación usa actualmente el dispositivo para evitar perder la notificación.

Si la aplicación con la notificación activa no responde con RetainDevice inmediatamente, se supone que la aplicación se ha suspendido o no necesita el dispositivo y la notificación se revoca y se da a la nueva aplicación.

El primer paso es crear un controlador de eventos que responda al evento ReleaseDeviceRequested con 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();
    }

A continuación, registre el controlador de eventos en asociación con el dispositivo reclamado.

    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");
    }

API usadas para la negociación de notificaciones

Dispositivo reclamado Notificación de versión Conservar dispositivo
ClaimedBarcodeScanner ReleaseDeviceRequested RetainDevice
ClaimedCashDrawer ReleaseDeviceRequested RetainDevice
ClaimedLineDisplay ReleaseDeviceRequested RetainDevice
ClaimedMagneticStripeReader ReleaseDeviceRequested RetainDevice
ClaimedPosPrinter ReleaseDeviceRequested RetainDevice