Bagikan melalui


Sampel Output Asinkron (POS untuk Dokumentasi .NET v1.14 SDK)

Microsoft Point of Service untuk .NET (POS untuk .NET) mendukung output asinkron sesuai dengan spesifikasi Unified Point Of Service (UnifiedPOS). Dalam model output asinkron, Objek Layanan harus mengantre permintaan output sehingga dapat mengembalikan kontrol ke aplikasi secepat mungkin. Utas kedua kemudian harus mengirimkan output ke perangkat dan memberi tahu aplikasi ketika permintaan telah dipenuhi, baik dengan OutputCompleteEvent atau peristiwa ErrorEvent .

POS untuk pustaka kelas .NET menangani sebagian besar fungsi ini untuk pengembang Objek Layanan sehingga ada sedikit, jika ada, perbedaan antara perangkat output asinkron dan perangkat hanya output sinkron.

Untuk membuat proyek

  1. Buat proyek pustaka kelas Visual Studio.

  2. Tambahkan kode sampel di bawah ini ke proyek Anda.

  3. Tambahkan referensi ke rakitan Microsoft.PointOfService .

  4. Kompilasi dan salin Objek Layanan ke salah satu direktori di jalur beban rakitan Objek Layanan Anda.

Untuk menggunakan sampel aplikasi dengan Objek Layanan

  • Objek Layanan ini dapat digunakan dengan sampel aplikasi yang disajikan dalam Sampel Penanganan Aktivitas.

Contoh

Untuk menghasilkan ke perangkat PosPrinter, aplikasi akan paling umum menggunakan metode .PrintNormal(PrinterStation, String) Perhatikan bahwa kode Objek Layanan PosPrinter di bawah ini tidak menyediakan implementasi untuk metode ini. Sebaliknya, PrintNormalImpl(PrinterStation, PrinterState, String) diimplementasikan. Metode ini dipanggil oleh PUSTAKA POS untuk .NET untuk permintaan output sinkron dan asinkron.

Ketika aplikasi memanggil metode output, seperti PrintNormal, implementasi POS untuk .NET memeriksa nilai AsyncMode properti. Jika nilai ini false, maka POS untuk pustaka .NET mengirimkan permintaan ke PrintNormalImpl segera dan menunggunya kembali. Namun, jika nilainya benar, maka implementasi POS untuk .NET printNormal menambahkan permintaan ke antrean yang dikelola secara internal. Meskipun ada item dalam antrean, POS untuk utas yang dikelola .NET akan mengirim setiap permintaan, dalam urutan first-in-first-out (FIFO), ke perangkat dengan memanggil PrintNormalImpl. Ketika PrintNormalImpl kembali, implementasi pustaka akan menaikkan OutputCompleteEvent dalam aplikasi. Singkatnya, kode Objek Layanan yang sama dapat mendukung output sinkron dan asinkron tanpa perlu mengetahui mode output mana yang sedang digunakan.

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

Kode aplikasi dalam Sampel Penanganan Aktivitas dapat dikompilasi dan dijalankan dengan Objek Layanan ini.

Lihat Juga

Tugas

Konsep

Sumber Daya Lain