Как следует считывать объемные данные с устройства на C# в .NET 4.0? В частности, мне нужно быстро читать с USB-HID-устройства, которое испускает отчеты по 26 пакетам, где заказ должен быть сохранен.Рекомендации по реализации потока для быстрого, массового и непрерывного чтения в C#?
Я пробовал делать это в потоке BackgroundWorker. Он считывает один пакет из устройства за раз и обрабатывает его, прежде чем читать больше. Это дает разумное время отклика, но оно может потерять пакет здесь и там, и накладные расходы на чтение одного пакета складываются.
while (!(sender as BackgroundWorker).CancellationPending) {
//read a single packet
//check for header or footer
//process packet data
}
}
Какова наилучшая практика в C# для чтения такого устройства?
фона:
Мой USB HID устройство непрерывно передает большое количество данных. Данные разделены на 26 пакетов, и я должен зарезервировать заказ. К сожалению, устройство отмечает только первые пакеты в каждом отчете, поэтому мне нужно уловить каждый другой пакет между ними.
Какая версия .net? Ответ будет зависеть от этого. –
@MatthewWatson Я нацелился на .NET 4.0, но было бы замечательно, если бы ответ объяснил разницу с другими версиями. – Semaphore
Скорость передачи данных HID очень низкая, не более 8 КБ/сек. Вы не можете писать код, который не может идти в ногу с этим, не требуется «передовой практики». –