Вероятно, вы можете найти во внутренних исключениях еще одно, например,
COMException: The application called an interface that was marshalled for a different thread.
Это означает, что вы должны вызывать свои методы в другом потоке. Вероятно, если вы просмотрите стек вызовов, вы найдете обработчик событий, который вызывает этот код. Просто используйте Invoke / BeginInvoke метод для вызова вашего кода. Смотрите пример ниже:
if (this.InvokeRequired) // in some cases this condition will not work
{
this.BeginInvoke(new MethodInvoker(delegate() { this.Your_Method(); }));
return;
}
Я получил похожую ошибку, когда USB-устройство было отключено. Но в моем случае я получил его в автоматически сгенерированном классе WMI Wrap, который я вызвал в обработчике событий LibUsbDotNet.