Enfora モデムと通信するには、シリアル ポートにコマンドを送信する必要があります。すべてのコマンドに対して応答が返されますが、応答文字列の長さは異なる場合があります。書き方を知り、それが終わるまで返事を待つ必要があります...
そこで、シリアルポートから読み取り、プログラムが書き込みのみを行うスレッドを作成することを考えました...
スレッド機能
private void thread_Handler()
{
while(true)
this.read();
}
private void read()
{
if (this.rtbMessages.InvokeRequired)
{
try
{
SetTextCallback d = new SetTextCallback(read);
this.Invoke(d);
}
catch{}
}
else
{
readBuffer = serialPort.ReadExisting();
rtbMessages.AppendText(readBuffer);
}
}
したがって、このスレッドは常にcom PORTから読み取ろうとしており、この方法でメッセージを送信します
writeBuffer = "COMMAND 1";
serialPort.Write(writeBuffer);
writeBuffer = "COMMAND 2";
serialPort.Write(writeBuffer);
ただし、Write() で送信した 2 番目のコマンドから応答がありません... スレッドを削除し、Write() のたびに ReadExisting() を使用しようとしましたが、それも機能しませんでした。
私がそれを機能させる唯一の方法は、追加することでした
System.Threading.Thread.Sleep(1000);
Write を呼び出すたびに、すべての Write() コマンドからすべての応答を取得します...しかし、これを使用したくありません。送信するすべてのコマンドから効果的に書き込み、すべての応答を取得する別の方法を知りたいです。返信文字列の長さや、返信メッセージを受信するのにかかる時間に関係なく.
メッセージの生成を停止する別のコマンドを送信するまで、永遠にメッセージを受信し続けることがあります。
ありがとうございました!