2016-04-08 10 views
1

私はCOMシリアルポートからデータを読み込もうとしていますが、ポートが自動的に閉じているので、何もしないでください。私は処分のセットアップイベントを試して、セットアップしようとキャッチし、すべてのキャッチをデバッグしますが、幸運。C#シリアルポート自動閉鎖

いけない行うには他に何を知っている..

はSerialPort.isOpenはfalseを返し、スレッドがシリアルポートを再び開いたときに、それが動作することを無限のスレッドを作成しようとしましたが、スレッドが100%のCPUを食べます...

シリアル

_serialPort.DataReceived += new SerialDataReceivedEventHandler(RecebendoDados); 
_serialPort.Disposed += new EventHandler(PortaFechou); 
_serialPort.ErrorReceived += new SerialErrorReceivedEventHandler(PortaErro); 
_serialPort.PinChanged += new SerialPinChangedEventHandler(PinMudou);     
_serialPort.Open(); 
PortIsOpen = _serialPort.IsOpen; 
+0

シリアルポートオブジェクトは、それが閉じたときに通知するイベントを投げていますか?もしそうなら、あなたの再オープンスレッドはただ待つことができ、クローズが発生したときに通知されます。 –

+0

ハードウェアコントロールを無効にしてください。彼らは古風なもので、特にケーブルにケーブルが取り付けられている場合に問題が発生する可能性があります。私はまた、USB/9ピンのDコネクタアダプタで問題が発生しているのを見てきました。 – jdweng

+0

Markについては、ドキュメントのポートオブジェクトは、COMポートが(終了後に)破棄されたときにイベントをスローすると言いましたが、このイベントを監視しようとしましたが、 –

答えて

0

を開くコードは、なぜあなたは、COMポートが開いておくのですか?あなたがそれを書いてそれを閉じるときにそれを開いてください!
使用この:

if (!serialPort1.IsOpen) 
     serialPort1.Open(); 
    if (serialPort1.IsOpen) 
    { 
     serialPort1.WriteLine(inst.ToString()); 
     serialPort1.Close(); 
    } 
+0

私はデバイスが連続した情報を送信するので、私はそれを開いたままにして、私は何も書いていない、ちょうど送信されたデータを聞いて、その多くの情報、そのうちの1つは、(デバイスからPCへ) ..だから私は何も失わないように常に開いておく必要がある –

+0

@EduardoEstevão、あなたは 'serialPort1.ReadTimeout = SerialPort.InfiniteTimeout;'を試してみました。 –

+0

いいえ、私は本当に大きな数字を試しましたが、このオプションを見たことがありませんでした。ありがとうございました –