我有一个带有按钮和文本框的表单 Form1。当我单击按钮时,我应该从 USB 设备获取一些数据。出于某种原因,它只有大约 2% 正常工作(我能够在 100 次点击中得到 2 个正确响应)。这是Form1的代码:
namespace Test_onForm1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Lib1.FindHID.TransferInputAndOutputReports(0xC0); //request specific data from USB device
}
}
}
处理 USB 通信的代码位于 DLL Lib1 中(以下代码片段):
namespace Lib1
{
public static class FindHID
{
private static void TransferInputAndOutputReports(UInt16 repType)
{
//some code here sending request to USB device... and then read what came from USB
ReadInput();
//some code here
}
// Read an Input report.
private static void ReadInput()
{
Byte[] inputReportBuffer = null;
inputReportBuffer = new Byte[MyHid.Capabilities.InputReportByteLength];
IAsyncResult ar = null;
if (fileStreamDeviceData.CanRead)
{
// RUNS UP TO THIS POINT and then Form1 freezes most of the time
fileStreamDeviceData.BeginRead(inputReportBuffer, 0, inputReportBuffer.Length, new AsyncCallback(GetInputReportData), inputReportBuffer);
}
}
private static void GetInputReportData(IAsyncResult ar)
{
// RARELY GETS HERE
Byte[] inputReportBuffer = null;
inputReportBuffer = (byte[])ar.AsyncState;
fileStremDeviceData.EndRead(ar); //waits for read to complete
// then code to update Form1
}
}
}
}
当它不起作用时,它会在 fileStreamDeviceData.BeginRead 周围停止,然后 Form1 冻结。
为了进行测试,我创建了一个全新的项目,而不是使用 DLL,而是将所有 DLL 代码复制到 Form1。此选项在 100% 的时间里都可以正常工作。所以我的问题是为什么它不适用于 DLL?
更新:当我很幸运并且它开始工作时,它会无限期地工作,直到我关闭应用程序。然后,我必须继续努力让它再次工作。如何解决此问题?