HIDデバイスとのデータ転送セッションの終了時に、ソフトウェアは関数WriteFileで約20%の確率で停止します。
これはC#で書かれており、なぜこれが起こっているのか理解できません。パケットあたり20%のエラー率は単純に受け入れられず、その根底に到達するのに苦労しています。それが私の宣言またはデータ型に何かあるのではないかと思っていました。
これはインポートです
[DllImport("kernel32.dll")]
static public extern int WriteFile(int hFile, ref byte lpBuffer, int nNumberOfBytesToWrite, ref int lpNumberOfBytesWritten, int lpOverlapped);
そして、これは停止している関数の呼び出しです
Result = USBSharp.WriteFile(hidHandle, ref outputReportBuffer[0], outputReportBuffer.Length, ref NumberOfBytesWritten, 0);
ハンドルは有効であることが確認され、残りはかなり自明です...
関数は単に戻りません。私はこの問題をオンラインでいくつかの異なる場所で調べましたが、ほとんどの場合、誰の修正も適用されません。スレッド化して失敗した場合は再度呼び出すだけですが、数百のパケットで20%の時間を実行するのは、単純に...ひどいことです。
私はWindows7、C#、. NET 4.0を使用していますが、HIDデバイスは停止していませんが、アクティブで実行されています-それだけでなく、データ転送全体が適切に行われ、この呼び出しはトランザクションを完了するために最後に行われます。その後、停止します(すでにすべてのデータがありますが)。残念ながら、このデータは100%維持する必要があるため、トランザクションのこの最後の部分を無視することはできません。そうしないと、ユーザーに悪い、悪い、悪いことが起こります。