Sdílet prostřednictvím


Ukázka asynchronního výstupu (Dokumentace k sadě POS pro .NET v1.14 SDK)

Bod služby Microsoft pro .NET (POS pro .NET) podporuje asynchronní výstup v souladu se specifikací Unified Point Of Service (UnifiedPOS). V asynchronním výstupním modelu musí objekt služby zařadovat výstupní požadavky do fronty, aby mohl co nejrychleji vrátit řízení do aplikace. Druhé vlákno pak musí odesílat výstup do zařízení a informovat aplikace, když je požadavek splněn, a to buď pomocí outputCompleteEvent, nebo errorEvent události.

PoS pro knihovnu tříd .NET zpracovává většinu těchto funkcí pro vývojáře objektu služby, takže rozdíl mezi asynchronním výstupním zařízením a synchronním výstupem je pouze zařízení s malým rozdílem.

Vytvoření projektu

  1. Vytvořte projekt knihovny tříd sady Visual Studio.

  2. Do projektu přidejte níže uvedený ukázkový kód.

  3. Přidejte odkazy na sestavení Microsoft.PointOfService .

  4. Zkompilujte a zkopírujte objekt služby do jednoho z adresářů v cestě načtení sestavení objektu služby.

Použití ukázky aplikace s objektem služby

Příklad

K výstupu do zařízení PosPrinter bude aplikace nejčastěji používat metodu PrintNormal(PrinterStation, String) . Všimněte si, že následující kód objektu služby PosPrinter neposkytuje implementaci pro tuto metodu. PrintNormalImpl(PrinterStation, PrinterState, String) Místo toho se implementuje. Tato metoda je volána POS pro knihovnu .NET pro synchronní i asynchronní výstupní požadavky.

Když aplikace volá výstupní metodu, jako je PrintNormal, POS pro implementaci .NET zkontroluje hodnotu AsyncMode vlastnosti. Pokud je tato hodnota false, odešle poS pro knihovnu .NET požadavek na PrintNormalImpl okamžitě a počká, až se vrátí. Pokud je hodnota true, pak POS pro implementaci rozhraní .NET PrintNormal přidá požadavek do interně spravované fronty. I když jsou ve frontě položky, poS pro .NET spravované vlákno odešle každý požadavek v pořadí first-in-first-out (FIFO) do zařízení voláním PrintNormalImpl. Když PrintNormalImpl vrátí, implementace knihovny vyvolá OutputCompleteEvent v aplikaci. Stručně řečeno, stejný kód objektu služby může podporovat synchronní i asynchronní výstup, aniž by bylo nutné vědět, který výstupní režim se používá.

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
    }
}

Kód aplikace v ukázce obslužné rutiny události lze zkompilovat a spustit pomocí tohoto objektu služby.

Viz také

Úlohy

Koncepty

Další prostředky