Klaim perangkat Titik Layanan dan mengaktifkan model
Gunakan klaim perangkat Point of Service dan aktifkan API untuk mengklaim perangkat dan mengaktifkannya untuk operasi I/O.
Mengklaim untuk penggunaan eksklusif
Setelah membuat objek perangkat PointOfService, Anda harus mengklaimnya menggunakan metode klaim yang sesuai untuk jenis perangkat sebelum Anda dapat menggunakan perangkat untuk input atau output. Klaim memberikan akses eksklusif aplikasi ke banyak fungsi perangkat untuk memastikan bahwa satu aplikasi tidak mengganggu penggunaan perangkat oleh aplikasi lain. Hanya satu aplikasi pada satu waktu yang dapat mengklaim perangkat PointOfService untuk penggunaan eksklusif.
Catatan
Tindakan klaim menetapkan kunci eksklusif ke perangkat, tetapi tidak memasukkannya ke dalam status operasional. Lihat Mengaktifkan perangkat untuk operasi I/O untuk informasi selengkapnya.
API yang digunakan untuk mengklaim/merilis
Perangkat | Klaim | Lepaskan |
---|---|---|
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 |
Mengaktifkan perangkat untuk operasi I/O
Tindakan klaim menetapkan hak eksklusif untuk perangkat, tetapi tidak memasukkannya ke dalam status operasional. Untuk menerima peristiwa atau melakukan operasi output apa pun, Anda harus mengaktifkan perangkat menggunakan EnableAsync. Sebaliknya, Anda dapat memanggil DisableAsync untuk berhenti mendengarkan peristiwa dari perangkat atau berhenti melakukan output. Anda juga dapat menggunakan IsEnabled untuk menentukan status perangkat Anda.
API yang digunakan aktifkan/nonaktifkan
Perangkat | Aktifkan | Nonaktifkan | IsEnabled? |
---|---|---|---|
ClaimedBarcodeScanner | EnableAsync | DisableAsync | IsEnabled |
ClaimedCashDrawer | EnableAsync | DisableAsync | IsEnabled |
ClaimedLineDisplay | Tidak Berlaku¹ | Tidak Berlaku¹ | Tidak Berlaku¹ |
ClaimedMagneticStripeReader | EnableAsync | DisableAsync | IsEnabled |
ClaimedPosPrinter | EnableAsync | DisableAsync | IsEnabled |
Tampilan Baris ¹ tidak mengharuskan Anda mengaktifkan perangkat secara eksplisit untuk operasi I/O. Pengaktifan dilakukan secara otomatis oleh API PointOfService LineDisplay yang melakukan I/O.
Sampel kode: klaim dan aktifkan
Sampel ini menunjukkan cara mengklaim perangkat pemindai kode batang setelah Anda berhasil membuat objek pemindai kode batang.
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");
}
Peringatan
Klaim dapat hilang dalam keadaan berikut:
- Aplikasi lain telah meminta klaim perangkat yang sama dan aplikasi Anda tidak mengeluarkan RetainDevice sebagai respons terhadap peristiwa ReleaseDeviceRequested . (Lihat Negosiasi klaim di bawah ini untuk informasi lebih lanjut.)
- Aplikasi Anda telah ditangguhkan, yang mengakibatkan objek perangkat ditutup dan akibatnya klaim tidak lagi valid. (Lihat Siklus hidup objek perangkat untuk informasi lebih lanjut.)
Negosiasi klaim
Karena Windows adalah lingkungan multi-tugas, dimungkinkan bagi beberapa aplikasi di komputer yang sama untuk memerlukan akses ke periferal dengan cara yang kooperatif. API PointOfService menyediakan model negosiasi yang memungkinkan beberapa aplikasi berbagi periferal yang terhubung ke komputer.
Ketika aplikasi kedua di komputer yang sama meminta Klaim untuk periferal PointOfService yang sudah diklaim oleh aplikasi lain, pemberitahuan peristiwa ReleaseDeviceRequested diterbitkan. Aplikasi dengan klaim aktif harus merespons pemberitahuan peristiwa dengan memanggil RetainDevice jika aplikasi saat ini menggunakan perangkat untuk menghindari kehilangan klaim.
Jika aplikasi dengan klaim aktif tidak segera merespons dengan RetainDevice , diasumsikan bahwa aplikasi telah ditangguhkan atau tidak memerlukan perangkat dan klaim dicabut dan diberikan ke aplikasi baru.
Langkah pertama adalah membuat penanganan aktivitas yang merespons peristiwa ReleaseDeviceRequested dengan 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();
}
Selanjutnya, daftarkan penanganan aktivitas yang terkait dengan perangkat yang Diklaim
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 yang digunakan untuk negosiasi klaim
Perangkat yang diklaim | Pemberitahuan Rilis | Pertahankan Perangkat |
---|---|---|
ClaimedBarcodeScanner | ReleaseDeviceRequested | RetainDevice |
ClaimedCashDrawer | ReleaseDeviceRequested | RetainDevice |
ClaimedLineDisplay | ReleaseDeviceRequested | RetainDevice |
ClaimedMagneticStripeReader | ReleaseDeviceRequested | RetainDevice |
ClaimedPosPrinter | ReleaseDeviceRequested | RetainDevice |