Point of Service-Geräteanspruch und -Aktivierungsmodell
Verwenden Sie den Point of Service-Geräteanspruch, und aktivieren Sie APIs, um Geräte in Anspruch zu nehmen und sie für E/A-Vorgänge zu aktivieren.
Anspruch auf ausschließliche Nutzung
Nachdem Sie ein PointOfService-Geräteobjekt erstellt haben, müssen Sie es mit der entsprechenden Anspruchsmethode für den Gerätetyp anfordern, bevor Sie das Gerät für die Eingabe oder Ausgabe verwenden können. Anspruch gewährt der Anwendung exklusiven Zugriff auf viele funktionen des Geräts, um sicherzustellen, dass eine Anwendung die Verwendung des Geräts durch eine andere Anwendung nicht beeinträchtigt. Es kann jeweils nur eine Anwendung ein PointOfService-Gerät zur exklusiven Verwendung beanspruchen.
Hinweis
Die Anspruchsaktion richtet eine exklusive Sperre für ein Gerät ein, setzt sie jedoch nicht in einen Betriebszustand. Weitere Informationen finden Sie unter Aktivieren des Geräts für E/A-Vorgänge .
APIs, die zum Anspruch/Release verwendet werden
Sicherungsmedium | Anspruch | Freigabe |
---|---|---|
BarcodeScanner | BarcodeScanner.ClaimScannerAsync | ClaimedBarcodeScanner.Close |
CashDrawer | CashDrawer.ClaimDrawerAsync | ClaimedSourceDrawer.Close |
LineDisplay | LineDisplay.ClaimAsync | ClaimedineDisplay.Close |
MagneticStripeReader | MagneticStripeReader.ClaimReaderAsync | ClaimedMagneticStripeReader.Close |
PosPrinter | PosPrinter.ClaimPrinterAsync | ClaimedPosPrinter.Close |
Aktivieren des Geräts für E/A-Vorgänge
Die Anspruchsaktion richtet ausschließliche Rechte für das Gerät ein, setzt sie jedoch nicht in einen Betriebszustand ein. Um Ereignisse zu empfangen oder Ausgabevorgänge auszuführen, müssen Sie das Gerät mithilfe von EnableAsync aktivieren. Umgekehrt können Sie DisableAsync aufrufen, um das Überwachen von Ereignissen vom Gerät zu beenden oder die Ausgabe zu beenden. Sie können isEnabled auch verwenden, um den Zustand Ihres Geräts zu bestimmen.
Verwendete APIs aktivieren/deaktivieren
Sicherungsmedium | Aktivieren | Disable | IsEnabled? |
---|---|---|---|
ClaimedBarcodeScanner | EnableAsync | DisableAsync | IsEnabled |
ClaimedCashDrawer | EnableAsync | DisableAsync | IsEnabled |
ClaimedLineDisplay | Nicht anwendbar¹ | Nicht anwendbar¹ | Nicht anwendbar¹ |
ClaimedMagneticStripeReader | EnableAsync | DisableAsync | IsEnabled |
ClaimedPosPrinter | EnableAsync | DisableAsync | IsEnabled |
¹ Zeilenanzeige erfordert nicht, dass Sie das Gerät explizit für E/A-Vorgänge aktivieren. Die Aktivierung erfolgt automatisch durch die PointOfService LineDisplay-APIs, die E/A ausführen.
Codebeispiel: Anspruch und Aktivierung
In diesem Beispiel wird gezeigt, wie Sie ein Strichcodescannergerät anfordern, nachdem Sie ein Strichcodescannerobjekt erfolgreich erstellt haben.
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");
}
Warnung
Ein Anspruch kann unter folgenden Umständen verloren gehen:
- Eine andere App hat einen Anspruch auf dasselbe Gerät angefordert, und Ihre App hat als Reaktion auf das ReleaseDeviceRequested-Ereignis keine RetainDevice auszugeben. (Siehe Anspruchsverhandlung unten, um weitere Informationen zu erfahren.)
- Ihre App wurde angehalten, was dazu führte, dass das Geräteobjekt geschlossen wurde und daher der Anspruch nicht mehr gültig ist. (Siehe Geräteobjektlebenszyklus für weitere Informationen.)
Forderungsverhandlung
Da Windows eine Multi-Tasking-Umgebung ist, ist es möglich, dass mehrere Anwendungen auf demselben Computer Zugriff auf Peripheriegeräte auf kooperative Weise benötigen. Die PointOfService-APIs stellen ein Aushandlungsmodell bereit, mit dem mehrere Anwendungen Peripheriegeräte gemeinsam mit dem Computer teilen können.
Wenn eine zweite Anwendung auf demselben Computer einen Anspruch für ein PointOfService-Peripheriegerät anfordert, das bereits von einer anderen Anwendung beansprucht wird, wird eine ReleaseDeviceRequested-Ereignisbenachrichtigung veröffentlicht. Die Anwendung mit dem aktiven Anspruch muss auf die Ereignisbenachrichtigung reagieren, indem Sie RetainDevice aufrufen, wenn die Anwendung derzeit das Gerät verwendet, um zu vermeiden, dass der Anspruch verloren geht.
Wenn die Anwendung mit dem aktiven Anspruch nicht sofort mit RetainDevice reagiert, wird davon ausgegangen, dass die Anwendung angehalten wurde oder das Gerät nicht benötigt und der Anspruch widerrufen und der neuen Anwendung übergeben wird.
Der erste Schritt besteht darin, einen Ereignishandler zu erstellen, der auf das ReleaseDeviceRequested-Ereignis mit RetainDevice reagiert.
/// <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();
}
Registrieren Sie als Nächstes den Ereignishandler in Verbindung mit Ihrem beanspruchten Gerät.
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, die für die Anspruchsverhandlung verwendet werden
Beanspruchtes Gerät | Freigabebenachrichtigung | Gerät beibehalten |
---|---|---|
ClaimedBarcodeScanner | ReleaseDeviceRequested | RetainDevice |
ClaimedCashDrawer | ReleaseDeviceRequested | RetainDevice |
ClaimedLineDisplay | ReleaseDeviceRequested | RetainDevice |
ClaimedMagneticStripeReader | ReleaseDeviceRequested | RetainDevice |
ClaimedPosPrinter | ReleaseDeviceRequested | RetainDevice |