共用方式為


裝置輸入和事件 (POS for .NET v1.14 SDK 文件)

所有 POS 裝置均可產生事件或變更與應用程式無關的狀態。 例如,如果操作員卸載 PinPad 裝置,應用程式就不會直接偵測到此變更,因為它不是應用程式所要求的狀態變更。 服務物件必須有一些方法,才能對應用程式發出這些狀態變更的警示。

多執行緒

由於讓應用程式持續輪詢服務物件目前的狀態可能太昂貴,因此需要另一個解決方案。 一般而言,解決方案會建立背景執行緒來監視裝置。

如其他範例所示,建立讀取器執行緒一律是輸入裝置的必要專案,例如掃描器或磁條讀取器。 不過,對於線路顯示器和印表機等輸出裝置,通常需要第二個執行緒監看狀態變更,例如失去電源或離線,然後將 StatusUpdateEvent 事件傳送至應用程式。

如此一來,服務物件就可以回應應用程式的要求,同時以非同步方式監視硬體。

定義事件

事件是服務物件通知裝置中狀態變更或新資料抵達的機制。

一般而言,事件是一個執行緒或進程與另一個發生事件的通知。 更具體而言,Microsoft Point of Service for .NET (POS for .NET) 會使用 .NET 委派功能傳遞至應用程式。

UnifiedPOS (UnifiedPOS) 規格會定義一組五個事件:DataEventDirectIOEventErrorEventOutputCompleteEventStatusUpdateEvent。 每個服務物件都可能只支援其中一部分。 資料的確切內容也取決於服務物件類型。

事件佇列

當您建立一個從其中一個 POS for .NET 基底類別衍生的服務物件類別時,事件不會直接從服務物件傳送到應用程式。 事件會改放入基底類別所管理的佇列中。 由於在事件可能傳遞至應用程式之前必須符合條件,因此基底類別中的程式碼只會在適當時分派事件。 服務物件不需要注意佇列或必須符合的需求,才能引發事件。 這可大幅減輕服務物件開發人員的負擔。

事件佇列會使用其自身的執行緒以非同步方式運作。 這表示服務物件不會等候事件的實際傳遞。

將事件新增至佇列

POS for .NET 基底類別提供數種方式,可根據服務物件和事件種類將事件新增至佇列中。

許多基底類別均有協助程式方法,可簡化特定事件的佇列;最常見的是 DataEvent 事件。 例如,MsrBase.GoodRead 方法可用來在成功讀取卡片之後將 DataEvent 事件排入佇列。 同樣地,PosKeyboard.KeyDown 會排入佇列 DataEvent,指出已按下按鍵。

當特定狀態變更時,基底類別也可能會自動將事件排入佇列。 例如,如果服務物件已設定其 Properties.CapPowerReporting 屬性,則 StatusUpdateEvent 表示只要在 服務物件中設定 Properties.PowerState 屬性即可傳送電源變更。

最後,如有需要,服務物件可能會使用任何 QueueEvent 覆寫以特別將事件排入佇列。 這最常用於傳送 DirectIOEvent。 由於 DirectIOEvent 事件是供應商特定和裝置特定的事件,因此無法使用泛型機制來將其排入佇列。

同步輸入

雖然服務物件會以非同步方式讀取大部分的裝置輸入,然後以事件形式分派至應用程式,但在某些情況下,應用程式可能會向服務物件要求資料,直到資料就緒或達到逾時才會傳回。 如需事件驅動輸入的詳細資訊,請參閱事件管理

另請參閱

工作

概念

其他資源