串口通讯dataarive事件不能触发解决思路

串口通讯dataarive事件不能触发
代码如下:
Public   WithEvents   g_port   As   IO.Ports.SerialPort
                        g_port.PortName   =   mPort
                        g_port.BaudRate   =   BualdRate
                        g_port.Parity   =   IO.Ports.Parity.None     'Parity
                        g_port.DataBits   =   8   '   DataBit
                        g_port.StopBits   =   StopBits.One
                        g_port.ReceivedBytesThreshold   =   1
                        g_port.Open()
        Private   Sub   Button3_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   Button3.Click
                If   mPortState   =   PortState.mOpen   Then
                        g_port.WriteLine( "aaaaaaaaaaaaaaaaaaaaaa ")
                End   If
        End   Sub

    Private   Sub   g_port_DataReceived(ByVal   sender   As   Object,   ByVal   e   As   System.IO.Ports.SerialDataReceivedEventArgs)   Handles   g_port.DataReceived
                MsgBox(g_port.ReadLine)
        End   Sub
可是我的datareceived事件根本不能触发。原因是不是我单机调试?难道应该两台机器测试吗?



------解决方案--------------------
SerialPort.RtsEnable=True
SerialPort.DtrEnable=True



SerialPort.Handshake=Handshake.RequestToSend


------解决方案--------------------
vb.net 2005 的一个小BUG
一般情况下,串口控件serialport通过datareceived事件对收到的数据进行处理,在处理的时候,为了保证程序的正常的运行,此事件是异步方式执行了,也就是处在一个不同的进程中执行。这样一来,如果要想对主进程中的对象进行访问(象TEXTBOX)时,就要使用到了委托了。

正常的情况下,在一个FORM中加入了SERIALPORT,并写了datareceived事件,如果没有使用委托(delegate),.net会在程序运行时给出提示或者报错。

不过,我遇到了一个特殊的情况。首先介绍一下我的程序结构。

首先,我要实现一个封装的类A,在A中使用了一个serialport,同时A具有其它的属性。在程序运行过程中,根据需要生成对象A。

问题就在这时产生了,开始我忘记使用委托了。我在对窗体上的控件进行处理时,即使datareceived事件触发了,窗体上没有一点变化。DEBUG一切正常,只是没有结果。

接下来,我使用的委托,不过我建立了委托在窗体内,这时结果完全一样。后事我发现窗体的InvokeRequired一直是false。

最后我把委托建立在封装了类里,一切正常。



------解决方案--------------------
线没连接