Я хочу прочитать входные данные от двух сканеров 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
,При изменении порядка назначения событий также распознается распознанный сканер.