【发布时间】:2015-02-06 08:42:44
【问题描述】:
在 .NET 4.0 中应该如何处理从 C# 中的设备读取批量数据?具体来说,我需要从一个 USB HID 设备中快速读取,该设备发出超过 26 个数据包的报告,其中必须保留顺序。
我尝试在 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,但如果一个答案也能解释与其他版本的区别,那就太好了。
-
HID 数据速率非常低,最高 8 KB/秒。你不能编写跟不上它的代码,不需要“最佳实践”。
-
@HansPassant 这比每毫秒 64 字节的情况要高一点,但这个问题与 USB 或 HID 无关。我只是好奇应该如何处理这样的事情。
标签: c# multithreading io usb hid