Partager via


Revendication d’appareil de point de service et modèle d’activation

Utilisez la revendication d’appareil de point de service et activez les API pour revendiquer des appareils et les activer pour les opérations d’E/S.

Revendication d’utilisation exclusive

Après avoir créé un objet d’appareil PointOfService, vous devez le revendiquer à l’aide de la méthode de revendication appropriée pour le type d’appareil avant de pouvoir utiliser l’appareil pour l’entrée ou la sortie. La revendication accorde à l’application un accès exclusif à de nombreuses fonctions de l’appareil pour s’assurer qu’une application n’interfère pas avec l’utilisation de l’appareil par une autre application. Une seule application à la fois peut revendiquer un appareil PointOfService pour une utilisation exclusive.

Remarque

L’action de revendication établit un verrou exclusif sur un appareil, mais ne le place pas dans un état opérationnel. Pour plus d’informations, consultez Activer l’appareil pour les opérations d’E/S.

API utilisées pour revendiquer /libérer

Appareil Revendication Version release
BarcodeScanner Code-barresScanner.ClaimScannerAsync ClaimedBarcodeScanner.Close
CashDrawer CashDrawer.ClaimDrawerAsync ClaimedDrawer.Close
LineDisplay LineDisplay.ClaimAsync ClaimedineDisplay.Close
MagneticStripeReader MagneticStripeReader.ClaimReaderAsync ClaimedMagneticStripeReader.Close
PosPrinter PosPrinter.ClaimPrinterAsync ClaimedPosPrinter.Close

Activer l’appareil pour les opérations d’E/S

L’action de revendication établit des droits exclusifs sur l’appareil, mais ne la place pas dans un état opérationnel. Pour recevoir des événements ou effectuer des opérations de sortie, vous devez activer l’appareil à l’aide d’EnableAsync. À l’inverse, vous pouvez appeler DisableAsync pour arrêter l’écoute des événements de l’appareil ou arrêter l’exécution de la sortie. Vous pouvez également utiliser IsEnabled pour déterminer l’état de votre appareil.

API utilisées pour activer /désactiver

Appareil Activer Disable IsEnabled ?
ClaimedBarcodeScanner EnableAsync DisableAsync IsEnabled
ClaimedCashDrawer EnableAsync DisableAsync IsEnabled
ClaimedLineDisplay Non applicable¹ Non applicable¹ Non applicable¹
ClaimedMagneticStripeReader EnableAsync DisableAsync IsEnabled
ClaimedPosPrinter EnableAsync DisableAsync IsEnabled

¹ Affichage de ligne ne vous oblige pas à activer explicitement l’appareil pour les opérations d’E/S. L’activation est effectuée automatiquement par les API PointOfService LineDisplay qui effectuent des E/S.

Exemple de code : revendication et activation

Cet exemple montre comment revendiquer un appareil de scanneur de codes-barres après avoir créé un objet scanneur de codes-barres.


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

Avertissement

Une réclamation peut être perdue dans les circonstances suivantes :

  1. Une autre application a demandé une revendication du même appareil et votre application n’a pas émettre de RétentionDevice en réponse à l’événement ReleaseDeviceRequested . (Voir Négociation de revendication ci-dessous pour plus d’informations.)
  2. Votre application a été suspendue, ce qui a entraîné la fermeture de l’objet de l’appareil et, par conséquent, la revendication n’est plus valide. (Voir Cycle de vie des objets d’appareil pour plus d’informations.)

Négociation des revendications

Étant donné que Windows est un environnement multi-tâches, il est possible que plusieurs applications sur le même ordinateur nécessitent l’accès aux périphériques de manière coopérative. Les API PointOfService fournissent un modèle de négociation qui permet à plusieurs applications de partager des périphériques connectés à l’ordinateur.

Lorsqu’une deuxième application sur le même ordinateur demande une revendication pour un périphérique PointOfService déjà revendiqué par une autre application, une notification d’événement ReleaseDeviceRequested est publiée. L’application avec la revendication active doit répondre à la notification d’événement en appelant RetainDevice si l’application utilise actuellement l’appareil pour éviter de perdre la revendication.

Si l’application avec la revendication active ne répond pas immédiatement avec RetainDevice , il est supposé que l’application a été suspendue ou n’a pas besoin de l’appareil et que la revendication est révoquée et donnée à la nouvelle application.

La première étape consiste à créer un gestionnaire d’événements qui répond à l’événement ReleaseDeviceRequested avec 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();
    }

Ensuite, inscrivez le gestionnaire d’événements en association avec votre appareil revendiqué

    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 utilisées pour la négociation des revendications

Appareil revendiqué Notification de mise en production Conserver l’appareil
ClaimedBarcodeScanner ReleaseDeviceRequested RetainDevice
ClaimedCashDrawer ReleaseDeviceRequested RetainDevice
ClaimedLineDisplay ReleaseDeviceRequested RetainDevice
ClaimedMagneticStripeReader ReleaseDeviceRequested RetainDevice
ClaimedPosPrinter ReleaseDeviceRequested RetainDevice