none
串列埠緩衝區滿了如何清空? _VB2008 RRS feed

  • 問題

  • 大家好

    下面的程式碼我發現在緩衝區(4096 Bytes)資料收滿時發生資料接收速度變慢

    如何把緩衝區在收滿後清空從收? 才可正確接收資料

    謝謝

    ---------------------------------------------------------

    Imports System
    Imports System.IO.Ports
    Public Class Form1
        Dim WithEvents RS232_port As SerialPort = New  _
         System.IO.Ports.SerialPort("COM3", 9600, Parity.None, 8, StopBits.One)

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            CheckForIllegalCrossThreadCalls = False
            If RS232_port.IsOpen = False Then RS232_port.Open()
        End Sub

        Private Sub port_DataReceived(ByVal sender As Object, ByVal e As  _
           System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232_port.DataReceived
                    Debug.Print(RS232_port.ReadByte)
        End Sub

    End Class

    2011年4月6日 下午 10:00

解答

  • 我猜啦, 是因為每次觸發了 DataReceived事件後都只讀一個Byte才導致爆掉..

    類似這樣的狀況

    第一次收到1024Bytes, 然後讀出一個Byte, 還剩1023,

    第二次又收到1024Byte, 然後讀出一個Byte, 加上先前結餘, 還有2046沒有讀.

    一直下去之後就爆了.

    所以建議那個ReadByte可以用迴圈包起來, 把接收進來的資料都讀完

    Private Sub port_DataReceived(ByVal sender As Object, ByVal e As  _
           System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232_port.DataReceived
                    Debug.Print(RS232_port.ReadByte)
        End Sub


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 jcLove 2011年4月7日 上午 05:45
    2011年4月7日 上午 04:14
    版主

所有回覆