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