Мне интересно, почему .NET framework не предоставляет никаких управляемых методов работы с USB-драйверами. Из всего, что я прочитал, вам все равно придется звонить в Windows API и использовать marshalling и PInvoke и все такое дерьмо, которое никто из нас не хочет делать .NET-программистам. Почему .NET предоставляет методы для обмена данными с последовательными портами, но не с USB-портами? USB стал гораздо более широко использоваться, что теперь серийные порты, не пора ли они включить его в Framework?Почему инфраструктура .NET не включает инструменты USB
ответ
Как и все другие функции в инфраструктуре .Net, это сводится к стоимости и вознаграждению. При каждом выпуске .Net владельцы должны принимать очень болезненные решения для решения задач. Просто слишком много запросов/хочет их сатизировать. Те, которые выбраны, должны обеспечить четкую стоимость по разумной цене.
Я полагаю, что последовательные порты, хотя и менее популярны, чем USB, проще реализовать в управляемом коде. Следовательно, хотя использование может быть не таким высоким, относительная легкость их реализации ставит их сверху.
Другим фактором является то, что многие устройства USB ожидают, что взаимодействие будет проходить через их драйвер, а не интерфейс USB напрямую. Тогда бывают ситуации, когда серийный выбор более практичен (т. Е.: Критические операции по времени, сбор данных, устаревшее оборудование и т. Д.). USB может быть более популярным в мире потребителей, но серийный номер все еще жив и пинги. –
Если вы хотите подключиться к USB-устройству, совместимому с HID, вы можете взглянуть на CC.USBHID. Это старо и противно, но может заставить вас идти в правильном направлении. Доступны более зрелые проекты.
USB - это просто автобус. Способ общения с устройством зависит от чипа на другой стороне шины. Существует не стандартизированный способ общения со всеми устройствами.
Если поставщик устройств USB хочет подвергать устройство стандартным образом (большинство из них соответствуют стандартам для экономии затрат на разработку, документирование и обучение клиентов по поводу их API), их программисты-драйверы могут писать драйверы, которые устройство доступно для различных API Windows (массивное хранилище, WIA, DirectShow, виртуальный последовательный порт, Bluetooth, устройство для интерфейса пользователя и т. д.). Опять же, поскольку стандартизованные драйверы уже открыты для Windows API, нет необходимости в .Net напрямую разговаривать с оборудованием.
+1 для хорошей информации. – si618
** @ Deleters: ** Действительно ли стоит удалить этот вопрос? Это правильный технический вопрос с хорошим ответом, предоставленным Джаредом. –