LineDisplay 範例 (POS for .NET 1.14 版 SDK 文件)
相較於其他服務物件基底類別,LineDisplayBase 類別是相對精簡的抽象層,應用程式與實體裝置之間不需要太多程式碼。 LineDisplay 服務物件只需要公告實體裝置所支援的功能,並根據應用程式設定的顯示屬性修改其輸出。
LineDisplay 服務物件也可以監視裝置,並使用 StatusUpdateEvent 向應用程式回報電源或其他狀態變更。 這可以使用 Queue 方法來完成,例如使用 PosCommon 中的電源報告功能。 以這種方式監視裝置通常需要啟動新的執行緒來等候硬體事件,並將適當的 StatusUpdateEvent 排入佇列。 LineDisplay 服務物件也可以將 DirectIOEvents 傳送至應用程式。
實作 LineDisplay 類別和屬性
為 Microsoft.PointOfService 和 Microsoft.PointOfService.BaseServiceObject 命名空間新增 using 指示詞。
新增全域屬性 PosAssemblyAttribute,讓 PosExplorer 將此辨識為適用於 .NET 的 Microsoft 服務點 (POS for .NET) 組件。
建立衍生自 LineDisplayBase 的新類別。
將類別層級屬性 ServiceObjectAttribute 新增至新類別,讓 PosExplorer 將其辨識為服務物件。
實作抽象 LineDisplayBase 成員
所有 LineDisplay 服務物件都必須支援至少一個螢幕模式。 若要為應用程式提供有關支援螢幕模式的詳細資訊,請實作抽象屬性 LineDisplayScreenModes。
所有 LineDisplay 服務物件至少都必須實作 DisplayData(Cell[]),才能在輸出裝置上顯示字元。
其他功能
在服務物件中設定功能屬性,以公告對裝置功能的支援。 此範例示範如何實作 LineDisplay 閃爍功能。
若要實作閃爍功能
在建構函式中,將 CapBlink 屬性設定為 DisplayBlink.All 或 DisplayBlink.Each,以指出此服務物件支援的閃爍模式。
將 CapBlink 屬性設定為 true,表示應用程式可藉由呼叫 BlinkRate 來設定閃爍頻率。
實作 DisplayData 時,將這些和其他設定納入考慮。
範例
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.PointOfService;
using Microsoft.PointOfService.BaseServiceObjects;
[assembly: PosAssembly("Service Object Contractors, Inc.")]
namespace SOSample.LineDisplay
{
[ServiceObject(
DeviceType.LineDisplay,
"SampleLineDisplay",
"Sample LineDisplay Service Object",
1,
9)]
public class SampleLineDisplay : LineDisplayBase
{
SampleLineDisplay()
{
// The CapBlink property is initially set to
// DisplayBlink.None in LineDisplayBase. This property
// will be set here to indicate what mode of blinking
// text our Service Object can support.
Properties.CapBlink = DisplayBlink.All;
// Set the CapBlinkRate property to true to indicate
// that this device has the ability to change the
// rate at which it blinks by setting the property
// BlinkRate.
Properties.CapBlinkRate = true;
}
#region Implement Abstract LineDisplayBase Members
// LineDisplayScreenMode must be implemented to
// allow the application to find out which screen modes
// are supported by this device.
protected override LineDisplayScreenMode[]
LineDisplayScreenModes
{
get
{
LineDisplayScreenMode[] SupportedModes;
// Create a LineDisplayScreenMode object; this SO
// has a screen mode 10 columns wide and 2 rows deep.
LineDisplayScreenMode mode =
new LineDisplayScreenMode(10, 2, 0, 0);
// Allocate space for our screen mode array and
// initialize it to hold our supported screen
// mode(s).
SupportedModes =
new LineDisplayScreenMode[] { mode };
return SupportedModes;
}
}
// DisplayData is the method called from the application
// specifying what data should be displayed on the
// device.
protected override void DisplayData(Cell[] cells)
{
// Your code here:
// Send the data to your device. Take settings such
// as blink and blink rate into account here.
return;
}
#endregion Implement Abstract LineDisplayBase Members
#region Implement Abstract PosCommon Members
private string MyHealthText = "";
// PosCommon.CheckHealthText.
public override string CheckHealthText
{
get
{
// VerifyState(mustBeClaimed,
// mustBeEnabled).
VerifyState(false, false);
return MyHealthText;
}
}
// PosCommon.CheckHealth.
public override string CheckHealth(
HealthCheckLevel level)
{
// Verify that the device is open, claimed and enabled.
VerifyState(true, true);
// Your code here:
// check the health of the device and return a
// descriptive string.
// Cache result in the CheckHealthText property.
MyHealthText = "Ok";
return MyHealthText;
}
// PosCommon.DirectIOData.
public override DirectIOData DirectIO(
int command,
int data,
object obj)
{
// Verify that the device is open.
VerifyState(false, false);
return new DirectIOData(data, obj);
}
#endregion Abstract PosCommon Members
}
}