服務點設裝置宣告和啟用模型
使用服務點裝置宣告,並啟用 API 來宣告裝置,並啟用它們以進行 I/O 作業。
宣告供獨佔使用
建立 PointOfService 裝置物件後,必須使用裝置類型的適當宣告方法聲明它,然後才能使用該裝置進行輸入或輸出。 宣告會授予應用程式對許多裝置功能的獨佔存取權限,以確保一個應用程式不會干=擾另一個應用程式對裝置的使用。 一次只有一個應用程式可以宣告 PointOfService 裝置供獨佔使用。
注意
聲明操作會建立裝置的獨佔鎖定,但不會將其置於操作狀態。 如需詳細資訊,請參閱啟用裝置以進行 I/O 作業。
用於聲明/發行的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 |
啟用 I/O 作業的裝置
聲明操作會建立裝置的獨佔權,但不會將其置於操作狀態。 若要接收事件或執行任何輸出作業,您必須使用 EnableAsync 啟用裝置。 相反地,您可以呼叫 DisableAsync 來停止接聽來自裝置的事件,或停止執行輸出。 您也可以使用 IsEnabled 來判斷裝置的狀態。
已使用啟用/停用的 API
裝置 | 啟用 | 停用 | IsEnabled? |
---|---|---|---|
ClaimedBarcodeScanner | EnableAsync | DisableAsync | IsEnabled |
ClaimedCashDrawer | EnableAsync | DisableAsync | IsEnabled |
ClaimedLineDisplay | 不適用 | 不適用 | 不適用 |
ClaimedMagneticStripeReader | EnableAsync | DisableAsync | IsEnabled |
ClaimedPosPrinter | EnableAsync | DisableAsync | IsEnabled |
1 線路顯示不需要您明確啟用裝置進行 I/O 操作。 啟用是由執行 I/O 的 PointOfService LineDisplay API 自動執行。
程式碼範例:宣告和啟用
此範例示範如何在成功建立條碼掃描器物件後聲明條碼掃描器裝置。
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 是多工作環境,因此同一部電腦上的多個應用程式可以合作方式要求存取周邊。 PointOfService API 提供交涉模型,可讓多個應用程式共用連線到計算機的周邊。
當相同電腦上的第二個應用程式要求已由另一個應用程式宣告的 PointOfService 周邊宣告時,會發佈 ReleaseDeviceRequested 事件通知。 具有作用中宣告的應用程式必須藉由呼叫 RetainDevice 來回應事件通知,如果應用程式目前使用裝置以避免遺失宣告。
如果具有作用中宣告的應用程式未立即回應 RetainDevice,則假設應用程式已暫停或不需要裝置,且宣告已撤銷並提供給新的應用程式。
第一個步驟是建立事件處理常式,以使用 RetainDevice 回應ReleaseDeviceRequested 事件。
/// <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 |