使用C#ReadAsync方法的USB HID通信似乎无法取消

时间:2015-05-28 20:40:33

标签: c# asynchronous usb hid

我有一个C#应用程序,它使用HID类通过USB与设备通信。

要从设备读取,我正在使用具有超时取消令牌的ReadAsync功能,基于Jan的Axelson代码 - http://janaxelson.com/hidpage.htm

            _transferInProgress = true;

            readCTS = new CancellationTokenSource();

            Action onReadTimeoutAction = OnReadTimeout;

            readCTS.CancelAfter(timeout);

            readCTS.Token.Register(onReadTimeoutAction);

            Task<Int32> t = _deviceData.ReadAsync(inputReportBuffer, 0, inputReportBuffer.Length, readCTS.Token);
            bytesRead = await t;

            readCTS.Dispose();

            _transferInProgress = false;

            return bytesRead;

在此应用程序中,主机(PC)请求某些数据是正常的,但设备(设备)从不回答它。当它发生时,ReadAsync似乎没有被超时取消。我还尝试在OnReadTimeout函数(被调用的IS)上调用_deviceData.Close(),但它不会使ReadAsync停止。因此,无论我做什么,代码永远不会到达“readCTS.Dispose();”的行,我在它上面放了一个断点,我发现它从未被调用过。

我需要一种方法来停止ReadAsync,因为有时设备不会发送数据。

编辑:OnReadTimeout的代码:

private void OnReadTimeout()
    {
        _transferInProgress = false;
        _deviceData.Close();
    }

0 个答案:

没有答案