串口通讯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。
最后我把委托建立在封装了类里,一切正常。
------解决方案--------------------
线没连接
代码如下:
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。
最后我把委托建立在封装了类里,一切正常。
------解决方案--------------------
线没连接