Sdílet prostřednictvím


Použití metod Impl pro synchronní nebo asynchronní výstup (Dokumentace k sadě POS pro .NET v1.14 SDK)

Některé typy zařízení POS podporují tisk nebo zobrazený výstup, například PosPrinter nebo LineDisplay. Objekty služby napsané pro zařízení s podporou výstupu by měly poskytovat podporu asynchronního i synchronního výstupu.

Aplikace, která provádí operaci asynchronně, nastaví vlastnost AsyncMode objektu služby na true před voláním požadované výstupní metody. Objekt služby může vyvolat výjimku, pokud nemůže zpracovat požadavek asynchronně, ale to není ideální, protože omezuje rozsah aplikací, které mohou použít tento konkrétní objekt služby.

Podpora asynchronního výstupu však může vyžadovat další a potenciálně komplikovaný kód. Tento kód spravuje frontu příchozích požadavků, udržuje vlákno pro monitorování požadavků fronty a odesílání ve správném pořadí a vyvolává události zpět do aplikace.

Základní třídy Microsoft Point of Service for .NET (POS pro .NET) můžou spravovat všechny tyto úlohy pro vývojáře. Pro každou výstupní metodu má základní třída pomocnou metodu přidruženou ke každé výstupní metodě. Tyto metody, které končí příponou Impl , se zapisují tak, jako by šlo o synchronní implementaci jejich nadřazené metody. Základní třída transparentně spravuje frontu, odesílá požadavky na funkce Impl ve správný čas ve správném pořadí a vyvolává příslušné události zpět do aplikace. Tato stejná metoda se volá pro synchronní i asynchronní operace.

Odvozením z POS pro .NET Base třídy, Service Object získá asynchronní funkce bez implementace dalšího kódu.

Implementace základní třídy

POS pro .NET poskytuje základní třídy pro podmnožinu typů zařízení POS. Pro každou výstupní metodu v těchto třídách existuje odpovídající metoda s příponou Impl . Objekt služby odvozený ze základní třídy by měl přepsat pouze Impl metoda, a nikoli odpovídající nadřazenou metodu. Například v třídě odvozené z POS pro .NET Base třídy PosPrinterBase, Service Object by poskytl implementaci Pro PrintNormalImpl a nepřepsat PrintNormal.

POS pro .NET Base třídy implementují všechny výstupní metody a provádějí následující úlohy, aby podporovala impl metodu implementovanou objektem služby:

  • Ověřte argumenty.
  • Pokud AsyncMode vlastnost je false, odpovídající Impl metoda je volána okamžitě.
  • Pokud je vlastnost AsyncMode nastavena na hodnotu true:
    1. Požadavek se umístí do fronty. Tuto frontu vlastní poS pro .NET a spravuje ji vlastní vlákno.
    2. Požadavky ve frontě se prověřují vláknem fronty a volá se odpovídající metoda Impl . Toto volání může být zpožděné, pokud zařízení již zpracovává výstupní požadavek nebo pokud existuje požadavek s vyšší prioritou ve frontě.
  • Když Impl metoda vrátí, POS pro .NET Base třídy kód zpracovává všechny výsledky. U synchronního volání může metoda buď vrátit hodnotu, nebo vyvolat výjimku. U asynchronního volání může metoda vyvolat události OutputCompleteEvent nebo ErrorEvent zpět do aplikace.
  • Metody Impl mohou také vrátit objekt, který obsahuje nejen informace o chybách, ale také statistické hodnoty.

Metody Impl objektu služby

Vzhledem k tomu, že většinu zpracování zpracovává kód základní třídy, může být metoda Impl objektu služby relativně jednoduchá.

V mnoha případech je stav zařízení v době původního volání vyžadován metodou Impl . V těchto situacích kód základní třídy ukládá aktuální stav zařízení spolu s výstupním požadavkem. Stav zařízení se později odešle jako argument do metody Impl . Například definice PrintNormalImpl je:

protected override PrintResults PrintNormalImpl(
    PrinterStation station,
    PrinterState printerState,
    string data);

Argument printerState výše je specifický pro Impl metoda a neexistuje v definiciPrintNormal(PrinterStation, String).

Návratová hodnota funkcí Impl se také liší od jejich volací metody. Všimněte si například, že PrintNormalImpl metoda vrací třídu typu PrintResults. Kromě ErrorCode, ErrorCodeExtended, ErrorLevel a ErrorString existuje několik dalších vlastností, které bude použita volající metodou k aktualizaci počtu statistik.

Příklad

Následující příklad ukazuje, jak jsou tyto metody implementovány v kódu Service Object.

protected override PrintResults PrintNormalImpl(
        PrinterStation station,
        PrinterState printerState,
        string data)
{
    // First, create a PrintResults object to hold return values.
    PrintResults pr = new PrintResults();

    // Now print, depending on the station.
    if (station == PrinterStation.Receipt)
    {
        // Your code goes here.

        // Update statistics to be returned to the caller.
        pr.ReceiptLinePrintedCount = 1;
        pr.ReceiptCharacterPrintedCount = data.Length;
    }
    else if (station == PrinterStation.Slip)
    {
        // Your code goes here.

        // Update statistics to be returned to the caller.
        pr.SlipLinePrintedCount = 1;
        pr.SlipCharacterPrintedCount = data.Length;
    }

    return pr;
}

Viz také

Úlohy

Reference

Koncepty

Další prostředky