トップ回答者
SerialPortの割り込み処理について(Visual Basic)

質問
-
回答
-
WindowsFormの場合の簡単な例
フォームにツールボックスからSerialPortを貼り付け。
追加されたSerialPortを選択して、プロパティウィンドウでDataReceivedイベントを作ります。
あとは以下のようなコードでTextBoxに表示できます。
Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _ Handles SerialPort1.DataReceived Dim strReceiveData As String = SerialPort1.ReadExisting() 'イベントは別スレッドで発生するのでフォームのスレッドに同期させる必要があります。 Dim action As Action(Of String) = AddressOf AppendTextBox Me.Invoke(action, strReceiveData) End Sub Private Sub AppendTextBox(ByVal s As String) Me.TextBox1.AppendText(s) End Sub
-
何となく、書かれていることから読み取れること(シリアルポートの読み取りを、イベント ドリブンで行う)と、発生している問題が異なっているように思いました。
SerialPort.DataReceived イベントにハンドラを設定して、その中で受信は出来ていますよね?で、受信した内容を、UI に表示しようとすると、不定なタイミング(Debug モードだと、いつも、かな?)で例外が発生しているのではないですか?発生している事象、困っている内容は、守秘義務に反しない程度に詳しく書かないと、解決から遠ざかりますよ。
で、そうだとすると、C# ですが、この様なスレッドがありました。serialPortコンポーネント DataReceivedイベントについてご教授ください。
Jitta@わんくま同盟 -
あと、くどいようですが、環境はしっかりお書きになったようがよろしいかと。
仮想化していたり、USB⇔シリアル変換をしていたり、64bit OSを利用していたりなどで、場合によっては機器やドライバとの相性問題などが発生して涙することもありますので……
#泣かされましたともorzコードは正しいのに、うまくいかない場合は、フロー制御などを疑うとともに、使用している機器も疑ってみてください。
#もし、コードそのものがわからないというのであれば、まずはgekkaさんのコードをご確認くださいm(_ _)m
すべての返信
-
WindowsFormの場合の簡単な例
フォームにツールボックスからSerialPortを貼り付け。
追加されたSerialPortを選択して、プロパティウィンドウでDataReceivedイベントを作ります。
あとは以下のようなコードでTextBoxに表示できます。
Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _ Handles SerialPort1.DataReceived Dim strReceiveData As String = SerialPort1.ReadExisting() 'イベントは別スレッドで発生するのでフォームのスレッドに同期させる必要があります。 Dim action As Action(Of String) = AddressOf AppendTextBox Me.Invoke(action, strReceiveData) End Sub Private Sub AppendTextBox(ByVal s As String) Me.TextBox1.AppendText(s) End Sub
-
何となく、書かれていることから読み取れること(シリアルポートの読み取りを、イベント ドリブンで行う)と、発生している問題が異なっているように思いました。
SerialPort.DataReceived イベントにハンドラを設定して、その中で受信は出来ていますよね?で、受信した内容を、UI に表示しようとすると、不定なタイミング(Debug モードだと、いつも、かな?)で例外が発生しているのではないですか?発生している事象、困っている内容は、守秘義務に反しない程度に詳しく書かないと、解決から遠ざかりますよ。
で、そうだとすると、C# ですが、この様なスレッドがありました。serialPortコンポーネント DataReceivedイベントについてご教授ください。
Jitta@わんくま同盟 -
あと、くどいようですが、環境はしっかりお書きになったようがよろしいかと。
仮想化していたり、USB⇔シリアル変換をしていたり、64bit OSを利用していたりなどで、場合によっては機器やドライバとの相性問題などが発生して涙することもありますので……
#泣かされましたともorzコードは正しいのに、うまくいかない場合は、フロー制御などを疑うとともに、使用している機器も疑ってみてください。
#もし、コードそのものがわからないというのであれば、まずはgekkaさんのコードをご確認くださいm(_ _)m