USB HID在c#中的Read()上挂起

PUG*_*PUG 7 .net c# usb winapi hid

我正在尝试连接到USB数字刻度,代码确实连接到刻度scale.IsConnected,但是挂起scale.Read(250)250应该是超时(以毫秒为单位)但它永远不会从Read返回

我正在使用线程中的代码,除了由于新版本的Mike O Brien的HID库而导致的一个更改

public HidDevice[] GetDevices ()
    {
      HidDevice[] hidDeviceList;


      // Metler Toledo
      hidDeviceList = HidDevices.Enumerate(0x0eb8).ToArray();
      if (hidDeviceList.Length > 0)
    return hidDeviceList;

      return hidDeviceList;
    }
Run Code Online (Sandbox Code Playgroud)

我设法规模的工作,看看小李的答案在这里

PUG*_*PUG 4

我设法让秤正常工作。在我的回调(当比例返回数据时运行)中,我正在执行Read阻塞调用。

因此造成了僵局,我应该只使用ReadReportor Read。看看 Mike 在下面发布的示例

using System;
using System.Linq;
using System.Text;
using HidLibrary;

namespace MagtekCardReader
{
    class Program
    {
        private const int VendorId = 0x0801;
        private const int ProductId = 0x0002;

        private static HidDevice _device;

        static void Main()
        {
            _device = HidDevices.Enumerate(VendorId, ProductId).FirstOrDefault();

            if (_device != null)
            {
                _device.OpenDevice();

                _device.Inserted += DeviceAttachedHandler;
                _device.Removed += DeviceRemovedHandler;

                _device.MonitorDeviceEvents = true;

                _device.ReadReport(OnReport);

                Console.WriteLine("Reader found, press any key to exit.");
                Console.ReadKey();

                _device.CloseDevice();
            }
            else
            {
                Console.WriteLine("Could not find reader.");
                Console.ReadKey();
            }
        }

        private static void OnReport(HidReport report)
        {
            if (!_device.IsConnected) {
                return;
            }

            var cardData = new Data(report.Data);

            Console.WriteLine(!cardData.Error ? Encoding.ASCII.GetString(cardData.CardData) : cardData.ErrorMessage);

            _device.ReadReport(OnReport);
        }

        private static void DeviceAttachedHandler()
        {
            Console.WriteLine("Device attached.");
            _device.ReadReport(OnReport);
        }

        private static void DeviceRemovedHandler()
        {
            Console.WriteLine("Device removed.");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)