Condividi tramite


Modello di richiesta e abilitazione del dispositivo Point of Service

Usare le API di richiesta e abilitazione dei dispositivi Point of Service per richiedere i dispositivi e abilitarli alle operazioni di I/O.

Richiesta di utilizzo esclusivo

Dopo aver creato un Oggetto dispositivo PointOfService, è necessario richiederlo usando il metodo di attestazione appropriato per il tipo di dispositivo prima di poter usare il dispositivo per l'input o l'output. L'attestazione concede all'applicazione l'accesso esclusivo a molte delle funzioni del dispositivo per garantire che un'applicazione non interferisca con l'uso del dispositivo da un'altra applicazione. Una sola applicazione alla volta può richiedere un dispositivo PointOfService per l'uso esclusivo.

Nota

L'azione di richiesta stabilisce un blocco esclusivo a un dispositivo, ma non lo inserisce in uno stato operativo. Per altre informazioni, vedere Abilita il dispositivo per le operazioni di I/O.

API usate per richiedere/rilasciare

Dispositivo Richiesta di rimborso Versione
BarcodeScanner BarcodeScanner.ClaimScannerAsync ClaimedBarcodeScanner.Close
CashDrawer CashDrawer.ClaimDrawerAsync ClaimedCashDrawer.Close
LineDisplay LineDisplay.ClaimAsync ClaimedineDisplay.Close
MagneticStripeReader MagneticStripeReader.ClaimReaderAsync ClaimedMagneticStripeReader.Close
PosPrinter PosPrinter.ClaimPrinterAsync ClaimedPosPrinter.Close

Abilitare il dispositivo per le operazioni di I/O

L'azione di richiesta stabilisce i diritti esclusivi a un dispositivo, ma non lo inserisce in uno stato operativo. Per ricevere eventi o eseguire qualsiasi operazione di output, è necessario abilitare il dispositivo usando EnableAsync. Al contrario, è possibile richiamare DisableAsync per interrompere l'ascolto degli eventi dal dispositivo o interrompere l'esecuzione dell'output. È anche possibile usare IsEnabled per determinare lo stato del dispositivo.

API usate per abilitare/disabilitare

Dispositivo Abilitare Disabilitazione IsEnabled?
ClaimedBarcodeScanner EnableAsync DisableAsync IsEnabled
ClaimedCashDrawer EnableAsync DisableAsync IsEnabled
ClaimedLineDisplay Non applicabile¹ Non applicabile¹ Non applicabile¹
ClaimedMagneticStripeReader EnableAsync DisableAsync IsEnabled
ClaimedPosPrinter EnableAsync DisableAsync IsEnabled

La visualizzazione linea ¹ non richiede l'abilitazione esplicita del dispositivo per le operazioni di I/O. L'abilitazione viene eseguita automaticamente dalle API PointOfService LineDisplay che eseguono operazioni di I/O.

Esempio di codice: attestazione e abilitazione

Questo esempio illustra come attestare un dispositivo scanner di codice a barre dopo aver creato correttamente un oggetto scanner di codice a barre.


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

Avviso

Un'attestazione può andare perduta nelle seguenti circostanze:

  1. Un'altra app ha richiesto un'attestazione dello stesso dispositivo e l'app non ha rilasciato un oggetto RetainDevice in risposta all'evento ReleaseDeviceRequested. (Vedere Negoziazione dell'attestazione riportata di seguito per altre informazioni.
  2. L'app è stata sospesa, il che ha causato la chiusura dell'oggetto dispositivo e di conseguenza l'attestazione non è più valida. (Vedere Ciclo di vita dell'oggetto dispositivo per altre informazioni.

Negoziazione dell'attestazione

Poiché Windows è un ambiente con più attività, è possibile che più applicazioni nello stesso computer richiedano l'accesso alle periferiche in modo cooperativo. Le API PointOfService forniscono un modello di negoziazione che consente a più applicazioni di condividere periferiche connesse al computer.

Quando una seconda applicazione nello stesso computer richiede un'attestazione per una periferica PointOfService già richiesta da un'altra applicazione, viene pubblicata una notifica di evento ReleaseDeviceRequested. L'applicazione con l'attestazione attiva deve rispondere alla notifica dell'evento richiamando RetainDevice se l'applicazione usa attualmente il dispositivo per evitare di perdere l'attestazione.

Se l'applicazione con l'attestazione attiva non risponde immediatamente con RetainDevice , si presuppone che l'applicazione sia stata sospesa o non abbia bisogno del dispositivo e che l'attestazione venga revocata e assegnata alla nuova applicazione.

Il primo passaggio consiste nel creare un gestore eventi che risponde all'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();
    }

Fatto ciò, registrare il gestore eventi in associazione al dispositivo attestato

    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 usate per la negoziazione delle attestazioni

Dispositivo attestato Notifica rilascio Mantieni dispositivo
ClaimedBarcodeScanner ReleaseDeviceRequested RetainDevice
ClaimedCashDrawer ReleaseDeviceRequested RetainDevice
ClaimedLineDisplay ReleaseDeviceRequested RetainDevice
ClaimedMagneticStripeReader ReleaseDeviceRequested RetainDevice
ClaimedPosPrinter ReleaseDeviceRequested RetainDevice