tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。