Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Usługa Microsoft Point of Service dla platformy .NET (POS dla platformy .NET) obsługuje dane wyjściowe asynchroniczne zgodnie ze specyfikacją Unified Point Of Service (UnifiedPOS). W modelu danych wyjściowych asynchronicznych obiekt usługi musi kolejkować żądania wyjściowe, aby umożliwić jak najszybsze zwrócenie kontroli do aplikacji. Drugi wątek musi następnie wysyłać dane wyjściowe do urządzenia i powiadamiać aplikacje o spełnieniu żądania przy użyciu zdarzenia OutputCompleteEvent lub ErrorEvent .
Usługa POS dla biblioteki klas platformy .NET obsługuje większość tych funkcji dla dewelopera obiektu usługi, dzięki czemu istnieje niewiele, jeśli istnieje, różnica między urządzeniem wyjściowym asynchronicznym a synchronicznym urządzeniem wyjściowym tylko dla urządzenia wyjściowego.
Aby utworzyć projekt
Utwórz projekt biblioteki klas programu Visual Studio.
Dodaj poniższy przykładowy kod do projektu.
Dodaj odwołania do zestawów Microsoft.PointOfService .
Skompiluj i skopiuj obiekt usługi do jednego z katalogów w ścieżce ładowania zestawu obiektu usługi.
Aby użyć przykładu aplikacji z obiektem usługi
- Ten obiekt usługi może być używany z przykładową aplikacją przedstawioną w przykładzie procedury obsługi zdarzeń.
Przykład
Aby wyświetlić dane wyjściowe na urządzeniu PosPrinter , aplikacja będzie najczęściej używać PrintNormal(PrinterStation, String) metody . Zwróć uwagę, że poniższy kod obiektu usługi PosPrinter nie zapewnia implementacji dla tej metody. PrintNormalImpl(PrinterStation, PrinterState, String) Zamiast tego jest implementowany. Ta metoda jest wywoływana przez usługę POS dla biblioteki .NET dla żądań danych wyjściowych synchronicznych i asynchronicznych.
Gdy aplikacja wywołuje metodę wyjściową, taką jak PrintNormal, implementacja poS dla platformy .NET sprawdza wartość AsyncMode właściwości. Jeśli ta wartość ma wartość false, usługa POS dla biblioteki .NET wysyła żądanie do printNormalImpl natychmiast i czeka na jego powrót. Jeśli jednak wartość ma wartość true, usługa POS dla implementacji printNormal dla platformy .NET dodaje żądanie do kolejki zarządzanej wewnętrznie. Chociaż w kolejce znajdują się elementy, poS dla zarządzanego wątku platformy .NET będzie wysyłać każde żądanie w kolejności pierwszy na pierwszym wyjęcie (FIFO) do urządzenia przez wywołanie metody PrintNormalImpl. Po powrocie funkcji PrintNormalImpl implementacja biblioteki zgłosi element OutputCompleteEvent w aplikacji. Krótko mówiąc, ten sam kod obiektu usługi może obsługiwać zarówno synchroniczne, jak i asynchroniczne dane wyjściowe bez konieczności znajomości, który tryb wyjściowy jest używany.
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using Microsoft.PointOfService;
using Microsoft.PointOfService.BaseServiceObjects;
[assembly: PosAssembly("Service Object Contractors, Inc.")]
namespace SOSamples.AsyncOutput
{
[ServiceObject(
DeviceType.PosPrinter,
"AsyncOutputPrinter",
"Sample Async Printer",
1,
9)]
public class AsyncOutputSimulator : PosPrinterBase
{
public AsyncOutputSimulator()
{
DevicePath = "Sample Async Printer";
// Indicate that the Service Object supports
// the receipt printer.
Properties.CapRecPresent = true;
}
// Note that this method will be called by the POS for .NET
// library code, regardless of whether the print request
// is synchronous or asynchronous. The print request
// queue is managed completely by POS for .NET so the
// Service Object should simply write data to the device
// here.
protected override PrintResults PrintNormalImpl(
PrinterStation station,
PrinterState printerState,
string data)
{
// Your code to print to the actual hardware would go
// here.
// For demonstration, however, the code simulates
// that fulfilling this print request took 4 seconds.
Thread.Sleep(4000);
PrintResults results = new PrintResults();
return results;
}
// This method must be implemented by the Service
// Object, and should validate the data to be printed,
// including any escape sequences. This method should throw
// a PosControlException to indicate failure.
protected override void ValidateDataImpl(
PrinterStation station,
string data)
{
// Insert your validation code here.
return;
}
#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 device is open, claimed, and enabled.
VerifyState(true, true);
// Insert 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 Implement Abstract PosCommon Members
}
}
Kod aplikacji w przykładzie programu obsługi zdarzeń można skompilować i uruchomić przy użyciu tego obiektu usługi.