私はC#でSerialPort
クラスを使って開発しています。 SerialPort.Write()
はブロック方法です。 書き込みを停止するにはどうすればこの方法を終了できますか?私は書くためにスレッドを使用します。 書き込みを停止したいのにCOMポートが書き込みを続けているときにこのスレッドを中止します。SerialPort.Write() - 書き込みを停止するには?
アイデア?
ありがとうございます。
私の基本的な英語には申し訳ありません。
私はC#でSerialPort
クラスを使って開発しています。 SerialPort.Write()
はブロック方法です。 書き込みを停止するにはどうすればこの方法を終了できますか?私は書くためにスレッドを使用します。 書き込みを停止したいのにCOMポートが書き込みを続けているときにこのスレッドを中止します。SerialPort.Write() - 書き込みを停止するには?
アイデア?
ありがとうございます。
私の基本的な英語には申し訳ありません。
シリアルポートのストリームとUARTの両方がバッファリングを行います。
小さなパッケージ(行)を送信して書き込みスレッドを中断させ、最後の送信パッケージを外に出すのが最善の方法です。市民的な方法で書き込みを停止できる場合は、DiscardWriteBuffer()メソッドもあります。
小さなパッケージがオプションでない場合は、少なくともWriteBufferSizeを小さく(ただし> 0)設定することができます。
私はbreakstateアプローチでdiscardアプローチを選択しました。スレッド内の : serialPort.DiscardOutBuffer(); serialPort.BreakState = false; serialPort.write(); 別のスレッド serialPort.BreakState = true; serialPort.DiscardOutBuffer(); ただし、discardOutBufferのときにwritePortが書き込みを行っている場合は例外がスローされます これは私が選択するアプローチです。 –
SerialPort.Write()
のブロックされた状態から切断するには、SerialPort.DiscardOutBuffer()
を使用します。これにより、IOException
が発生しますが、ブロックされた状態から完全に脱出できればOKです。
シリアルポートにどのようなデータを書き込んでいますか? –
のデータはASCII文字です。 SerialPortがバイトを書き込んでいます。 –
書き込みを開始する前にWriteTimeoutプロパティを設定しようとしましたか? –