Утверждение устройства "Точка службы" и включение модели
Используйте утверждение устройства point of Service и включите 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 | СохранитьDevice |
ClaimedCashDrawer | ReleaseDeviceRequested | СохранитьDevice |
ClaimedLineDisplay | ReleaseDeviceRequested | СохранитьDevice |
ClaimedMagneticStripeReader | ReleaseDeviceRequested | СохранитьDevice |
ClaimedPosPrinter | ReleaseDeviceRequested | СохранитьDevice |