2009-04-20 14 views
1

私はC#でSerialPortクラスを使って開発しています。 SerialPort.Write()はブロック方法です。 書き込みを停止するにはどうすればこの方法を終了できますか?私は書くためにスレッドを使用します。 書き込みを停止したいのにCOMポートが書き込みを続けているときにこのスレッドを中止します。SerialPort.Write() - 書き込みを停止するには?

アイデア?

ありがとうございます。

私の基本的な英語には申し訳ありません。

+0

シリアルポートにどのようなデータを書き込んでいますか? –

+0

のデータはASCII文字です。 SerialPortがバイトを書き込んでいます。 –

+0

書き込みを開始する前にWriteTimeoutプロパティを設定しようとしましたか? –

答えて

1

シリアルポートのストリームとUARTの両方がバッファリングを行います。

小さなパッケージ(行)を送信して書き込みスレッドを中断させ、最後の送信パッケージを外に出すのが最善の方法です。市民的な方法で書き込みを停止できる場合は、DiscardWriteBuffer()メソッドもあります。

小さなパッケージがオプションでない場合は、少なくともWriteBufferSizeを小さく(ただし> 0)設定することができます。

+0

私はbreakstateアプローチでdiscardアプローチを選択しました。スレッド内の : serialPort.DiscardOutBuffer(); serialPort.BreakState = false; serialPort.write(); 別のスレッド serialPort.BreakState = true; serialPort.DiscardOutBuffer(); ただし、discardOutBufferのときにwritePortが書き込みを行っている場合は例外がスローされます これは私が選択するアプローチです。 –

0

SerialPort.Write()のブロックされた状態から切断するには、SerialPort.DiscardOutBuffer()を使用します。これにより、IOExceptionが発生しますが、ブロックされた状態から完全に脱出できればOKです。

関連する問題