私はSerialPortを使用してデバイスと通信しています。デバイスにはRS-485があり、反対側にはRS-232(仮想ポート)があります。デバイスは正しく動作し、データを正しく送受信します。DataReceivedイベントが発生しない場合があります
問題は、DataReceivedイベントが発生しないことがあることです。 System.Timerを使用して10秒に1回データをデバイスに送信します。ほとんどの場合、正常に動作しますが、1〜10分ごとに応答が得られません。その後、2〜4回後にDataReceivedイベントが最後に発生し、データのクラスタが取得されますforはバッファ内にあります)。
私の質問はどのように可能です?
私は申し訳ありませんが、私のアプリにはマルチスレッドがありません(メインスレッドとTimer_ElapsedイベントとDataReceivedイベントのスレッドのみ、別のスレッドで発生していると思います)。私のDataReceivedイベントは高速に処理され、並列に発生させるべきではありません(10秒で十分です。デバイスの応答時間が1秒未満です)。私がThread.Sleepを使用すると、それは何とでも繋がらないと確信している場所にあります。
COMポートが他のアプリケーション(そのうちの1つ、接続をテストするために提供されたデバイスの製造元ではありません)を使用して同様の方法でテストすると、ソフトウェアの問題よりもハードウェアになる可能性があります。それがC#で書かれたかのように見えません)。しかし、私はハードウェアでそれほど良いものではありません。おそらく、PCやCOMポートに何か問題があるかもしれません(ビルドインではなく外部です)。あるいは、それはオペレーティングシステムに関連するものかもしれません(私のアプリはWindows Server 2003上で動作するWindowsサービスです)。
なぜあなたは彼にアップフォートを与えませんか? – jgauffin
問題はありません、@アリー。あなたがそれを理解してうれしいです。 –