Утверждение и включение модели устройства точки обслуживания
Используйте утверждение устройства точки обслуживания и включите API для утверждения устройств и включения их для операций ввода-вывода.
Утверждение для монопольного использования
После создания объекта устройства PointOfService его необходимо запросить с помощью соответствующего метода утверждения для типа устройства, прежде чем вы сможете использовать устройство для ввода или вывода. Присвоение предоставляет приложению монопольный доступ ко многим функциям устройства. Это позволяет обеспечить, что приложению не будет мешать использовать устройство другое приложение. Только одно приложение за раз может претендовать на устройство PointOfService для монопольного использования.
Примечание
Действие утверждения устанавливает монопольную блокировку устройства, но не переводит его в рабочее состояние. Дополнительные сведения см. в статье Включение устройств для операций ввода-вывода .
API- интерфейсы, используемые для утверждения и выпуска
Устройство | Утверждение | Выпуск |
---|---|---|
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 |
Включение устройств для операций ввода-вывода
Иск претензии устанавливает монопольные права на устройство, но не переводит его в рабочее состояние. Чтобы получать события или выполнять какие-либо операции вывода, необходимо включить устройство с помощью EnableAsync. И наоборот, вы можете вызвать DisableAsync , чтобы прекратить прослушивание событий с устройства или прекратить выполнение выходных данных. Вы также можете использовать IsEnabled для определения состояния устройства.
Используемые API: включение и отключение
Устройство | Включить | Отключить | Isenabled? |
---|---|---|---|
ClaimedBarcodeScanner | EnableAsync | DisableAsync | IsEnabled |
ClaimedCashDrawer | EnableAsync | DisableAsync | IsEnabled |
ClaimedLineDisplay | Неприменимо ¹ | Неприменимо ¹ | Неприменимо ¹ |
ClaimedMagneticStripeReader | EnableAsync | DisableAsync | IsEnabled |
ClaimedPosPrinter | EnableAsync | DisableAsync | IsEnabled |
¹ Для отображения строки не требуется явное включение устройства для операций ввода-вывода. Включение выполняется автоматически API PointOfService LineDisplay, которые выполняют операции ввода-вывода.
Пример кода: утверждение и включение
В этом примере показано, как присвоить устройство со сканером штрихкодов после создания объекта сканера штрихкодов.
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");
}
Предупреждение
Присвоение может быть утеряно при следующих условиях.
- Другое приложение запросило присвоение этого же устройства, а ваше приложение не выдало RetainDevice в ответ на событие ReleaseDeviceRequested. (Дополнительные сведения см. в разделе Согласование присвоения.)
- Приложение было приостановлено, что привело к закрытию объекта устройства, и в результате присвоение стало недействительным. (Дополнительные сведения см. в разделе Жизненный цикл объекта устройства.)
Согласование присвоения
Так как Windows является многозадачной средой, для нескольких приложений на одном компьютере может потребоваться совместный доступ к периферийным устройствам. API-интерфейсы PointOfService предоставляют модель согласования, которая позволяет нескольким приложениям совместно использовать периферийные устройства, подключенные к компьютеру.
Когда второе приложение на одном и том же компьютере запрашивает присвоение для периферийного устройства PointOfService, которое уже присвоено другим приложением, публикуется уведомление о событии ReleaseDeviceRequested. Приложение с активным присвоением должно ответить на уведомление о событии, вызвав метод RetainDevice, если приложение в настоящий момент использует устройство во избежание потери присвоения.
Если приложение с активным присвоением сразу же не ответит с помощью метода RetainDevice, будет предполагаться, что приложение было приостановлено или не нуждается в устройстве, что приведет к отзыву присвоения и его передаче другому приложению.
Первым шагом является создание обработчика событий, который отвечает на событие ReleaseDeviceRequested с помощью 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();
}
Затем зарегистрируйте обработчик событий в связи с запрошенным устройством.
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-интерфейсы, используемые для согласования присвоения
Присвоенное устройство | Уведомление о выпуске | Удержание устройства |
---|---|---|
ClaimedBarcodeScanner | ReleaseDeviceRequested | RetainDevice |
ClaimedCashDrawer | ReleaseDeviceRequested | RetainDevice |
ClaimedLineDisplay | ReleaseDeviceRequested | RetainDevice |
ClaimedMagneticStripeReader | ReleaseDeviceRequested | RetainDevice |
ClaimedPosPrinter | ReleaseDeviceRequested | RetainDevice |
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по