我有一个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();
}