タイトル : Re^7: VB2005で、シリアル通信について 投稿日 : 2009/04/28(Tue) 17:37 投稿者 : AMI
お返事ありがとうございます。 早速アドバイスどおり、「ManualResetEvent」の 処理を調べて、下記のように実装したところ、 送信・受信を交互に繰り返すようになりました。 そこで、もう一つ問題がでてきて、 「e.EventType」 で、受信処理の成否をみているのですが、 連続的に処理していて、ある処理回数以上になると、 「SerialError.Overrun」 が出て、受信できなくなってしまいます。 おそらくエラーメッセージからして、受信バッファーの 設定値以上のデータがきてるので、エラーを吐き出しているとおもうのですが、 これの回避方法はあるのでしょうか? 例:受信バッファがいっぱいになりそうになると、シリアル送信処理をやめて、 受信バッファの処理に走る等 以上の件よろしくお願いお願いします。 Private Sub Serial_Send(ByVal Str_Send As String) '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++非同期用処理 Call Main() '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Try '送信コマンド発行 '_com.WriteLine(txtSendData.Text) 'Call AddMessage("[SND]" + txtSendData.Text) _com.WriteLine(Str_Send) Call AddMessage("[SND]" + Str_Send) Catch ex As Exception MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++非同期用処理 Call MyMethod() '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ End Sub Public Shared Sub Main() '非シグナル状態でManualResetEventオブジェクトを作成 manualEvent = New ManualResetEvent(False) 'スレッドを作成し、開始する Dim t1 As New Thread(New ThreadStart(AddressOf MyMethod)) t1.Name = "1" t1.Start() 'シグナル状態になるまでスレッドをブロックする manualEvent.WaitOne() Console.WriteLine("メインスレッド終了") Console.ReadLine() End Sub Public Shared Sub MyMethod() Console.WriteLine("{0}:スレッド開始", Thread.CurrentThread.Name) '何か仕事をするものとする Thread.Sleep(1000) 'シグナル状態にする manualEvent.Set() Console.WriteLine("{0}:スレッド終了", Thread.CurrentThread.Name) End Sub |