Partilhar via


Eventos do scanner (documentação do SDK do POS para .NET v1.14)

Os scanners de código de barras operam de forma assíncrona e, portanto, têm que notificar os aplicativos quando os dados estão disponíveis ou o estado do dispositivo foi alterado. Você executa essa tarefa usando delegados .NET para gerar eventos para o aplicativo.

Conforme discutido no tópico Entrada de dispositivo e eventos, os eventos são enfileirados antes de serem entregues ao aplicativo. As classes Base do Microsoft Point of Service for .NET (POS para .NET) fornecem um meio para que o código do objeto de serviço enfileire eventos para que sua entrega ao aplicativo possa ser adiada até que o aplicativo possa processá-los. Enquanto isso, o objeto de serviço pode continuar aguardando eventos de hardware de entrada adicionais.

O dispositivo Scanner pode enviar quatro eventos para o aplicativo. Para dois desses eventos, DataEvent e ErrorEvent, a classe POS para .NET ScannerBase fornece um método auxiliar protegido para simplificar o código necessário para gerar esses eventos:

Evento Método que enfileira o evento
DataEvent Método protegido ScannerBase.GoodRead
ErrorEvent Método protegido ScannerBase.FailedRead

Os outros dois eventos, DirectIOEvent e StatusUpdateEvent, devem ser gerados usando membros da classe ScannerBasic de nível inferior. Para obter mais informações, consulte Entrada de dispositivo e eventos.

Como um dispositivo Scanner pode entregar dados ao sistema a qualquer momento, um Objeto de Serviço do Scanner deve aguardar os dados de forma assíncrona iniciando um thread de leitor separado. Os eventos devem ser enfileirados a partir deste thread à medida que os dados chegam do dispositivo.

Para gerar eventos com base na entrada do dispositivo

  1. Inicie um thread de leitura para aguardar a entrada do dispositivo.

  2. Aguarde a entrada no thread do leitor, mais freqüentemente usando funções diretas do Win32 para ler dados do barramento USB.

  3. Depois de receber dados, verifique se os dados são válidos, por exemplo, se há bytes suficientes no pacote para o cabeçalho e o tipo de dados.

  4. Se os dados não forem válidos, chame o método ScannerBase.FailedScan para enfileirar um evento ErrorEvent que será gerado no aplicativo.

  5. Se os dados forem válidos, chame o método ScannerBase.GoodScan para enfileirar um evento DataEvent que eventualmente será gerado no aplicativo.

Exemplo

Assim que a entrada é recebida do dispositivo, o objeto de serviço enfileira o evento apropriado. Você pode fazer isso escrevendo um método, como o do exemplo neste tópico, que seria chamado a partir do thread de leitura do objeto de serviço.

// A Service Object may implement a method such as this one to
// be called from the reader thread of the Service Object.
void OnDataScanned(byte[] data)
{
    // Ignore input if process in the Error state. There is no
    // need to send an ErrorEvent to the application, because it has
    // already been notified by this point.
    if (State == ControlState.Error)
    {
        return;
    }

    // Make sure that the incoming buffer is large enough to contain
    // at least the header and type data.
    if ((int)data[1] < 5)
    {
        // By calling FailedRead, you are queueing an
        // ErrorEvent for eventual delivery to the application.
        FailedScan();
    }
    else
    {
        // The buffer received from the device will be longer
        // than we need. Therefore, trim it down. Allocate space for
        // the number of bytes contained in data[1], plus one
        // more for the first byte in the buffer.
        byte[] b = new byte[(int)data[1] + 1];

        // Copy the data into a new buffer.
        for (int i = 0; i <= (int)data[1]; i++)
        {
            b[i] = data[i];
        }

        // By calling GoodScan, you are queueing a DataEvent
        // which will delivered to the application when it is suitable.
        GoodScan(b);
    }
}

Este exemplo não pode ser compilado por conta própria, mas pode ser inserido em uma implementação completa do objeto de serviço do scanner.

Consulte Também

Tarefas

Conceitos

Outros Recursos