在处理串行通信时,我完全陷入了相对简单的任务。在VB6中没有任何问题,但是我找不到VB.net的解决方案
我想做什么:
1 /创建具有多种形式的应用程序来控制乐器。
2 /仪器可以随时发送消息。我需要捕获此类消息并将其传递给给定的表单。
如果我具有单个表单应用程序,并且所有代码都在一个类(表单)内,则没有任何问题。
我的想法是创建处理所有串行通信事件(serialcom)的模块或类,并以所有形式使用此模块或类的子或函数。它似乎部分起作用,但不是完全起作用。我当前的问题是我可以调用Subs SerialRead,但是除了MSGBox之外,我都无法传递结果字符串。我的意思是-我可以捕获传入的字符串,但无法将其传递到TextBox中,因此可以在MsgBox中显示它。我检查了数百个线程,但没有找到有效的解决方案。
我的两个课在下面。
主窗口:
Imports System.Threading
Public Class hlavni
Public sp As New serialcom
Private Sub InitBt_Click(sender As Object, e As EventArgs) Handles InitBt.Click
sp.SP_Open("COM1", 57600)
End Sub
Private Sub ExitBt_Click(sender As Object, e As EventArgs) Handles ExitBt.Click
sp.SP_Close()
Me.Close()
End Sub
Private Sub PowerBt_Click(sender As Object, e As EventArgs) Handles PowerBt.Click
sp.SP_Write("P" & vbCr)
End Sub
Private Sub EEpromReadBt_Click(sender As Object, e As EventArgs) Handles EEpromReadBt.Click
sp.SP_Write("E" & vbCr)
End Sub
End Class
串行通信类:
Imports System.IO.Ports
Imports System.Threading
Public Class serialcom
WithEvents SP As New SerialPort
Public WithEvents zprava As String
Public Sub SP_Open(ByVal P As String, ByVal B As Integer)
SP.PortName = P
SP.BaudRate = B
SP.Open()
End Sub
Public Sub SP_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SP.DataReceived
ReceivedText(SP.ReadExisting())
End Sub
Public Sub ReceivedText(ByVal [text] As String) 'input from ReadExisting
hlavni.outputRTB.Text &= [text] 'append text
MsgBox(text)
End Sub
Public Sub SP_Close()
SP.Close()
End Sub
Public Function SP_Read()
Dim zprava As String = SP.ReadExisting
zprava = SP.ReadExisting
Return zprava
End Function
Public Function SP_Write(ByVal Str As String)
SP.WriteLine(Str)
Return Str
End Function
End Class
任何想法或显示方向表示赞赏。 谢谢 扬