Почему Honeywell POS4NET запускает одно и то же событие для двух разных сканеров? - PullRequest
0 голосов
/ 15 мая 2018

Я хочу прочитать входные данные от двух сканеров Honeywell, а именно Voyager 1202g и Orbit 7190g .Для некоторых бизнес-требований оба устройства должны использоваться с одного компьютера. Оба сканера используют драйвер Honeywell POS4NET.

Мне нужно знать, , какой сканер доставляет данные.

Объекты Scanner создаются следующим образом

// This code is only for illustrating how my application works
// and may therefore be incomplete.

Microsoft.PointOfService.PosExplorer posExp = new PosExplorer(this);
DeviceCollection devices = posExp.GetDevices("Scanner", 
    DeviceCompatibilities.OposAndCompatibilityLevel1);
var listOfScanners =  { Voy1202g ,  Orbit7190g };     // symbolical code

foreach (string device in listOfScanners)
{
    var scanningDevice = posExp.CreateInstance(device) as Microsoft.PointOfService.Scanner;
    if (scanningDevice != null)
    {
        scanningDevice.Claim(1000);
        scanningDevice.DeviceEnabled = true;
        scanningDevice.DataEvent += ScanningDevice_DataEvent;
        scanningDevice.DecodeData = true;
        scanningDevice.DataEventEnabled = true;
        scanningDevice.ErrorEvent += ScanningDevice_ErrorEvent;
    }
}

Проблема: При чтении данных в обработчике событий ScanningDevice_DataEvent я больше не могу различать ихпоскольку для обоих сканеров происходит одинаковое событие , независимо от того, какой сканер фактически считывает штрих-код.

void ScanningDevice_DataEvent(object sender, DataEventArgs e)
{
    Scanner scanner = (Scanner)sender; // <--- sender is always the last one
                                       //       in listOfScanners, i.e. 
                                       //       Orbit7190g in this case. 
    // Additional code here ...

}

Эта проблема возникает, только если два сканера используют один и тот же драйвер.Если я использую два или более разных сканера, которые не разделяют драйвер, он работает как положено.Это также происходит, если я запускаю 2 разных экземпляра моего приложения, каждый из которых читает с одного из сканеров.

Вопрос: Как я могу заставить мое приложение запускать правильное событие?

Примечание: Мне кажется, что Microsoft.PointOfService содержит один экземпляр обработчика для типа ServiceObject , который в данном случае всегда равен HHP.PointOfService.ServiceObjects.Scanner.HandHeldScanner,При изменении порядка назначения событий также распознается распознанный сканер.

...