好吧,我已经设置了一个事件处理程序,该事件处理程序在连接到计算机串行端口的设备串行端口将带有此代码的文本消息接收:
Private Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)
Dim rxString As String
Dim index As Integer
Dim newMsg As New SMSMessage
RemoveHandler SMSPort.DataReceived, AddressOf DataReceivedHandler
Thread.Sleep(100)
rxString = SMSPort.ReadExisting()
rxString = TrimCRLF(rxString)
index = NewSMSIndex(rxString)
If index > -1 Then
newMsg = ReadSMS(index)
If newMsg.Index > -1 Then
SMS.Clear()
SMS.Add("Index: " & newMsg.Index & vbCrLf)
SMS.Add("Phone Number: " & newMsg.PhoneNum & vbCrLf)
SMS.Add(newMsg.RxOrTx & ": " & newMsg.MessageDateTime & vbCrLf)
SMS.Add("Message: " & newMsg.MessageText)
End If
End If
AddHandler SMSPort.DataReceived, AddressOf DataReceivedHandler
End Sub
现在,这是一个与我的GUI分开的类的一部分,称为MainWindow,
基本上,我无法弄清楚如何获得文本框以在主窗口上使用我写在代码中的列表" SMS"的主窗口上更新。
我说的是我想要的:
列表更改时,执行任务:
列表中的每个元素TextBox.AppendText(Elem)下一个然后将文本框显示waht写入
如果我不误解这个问题,则可以使用事件实现这一目标。在课堂上声明您有SMS列表的活动,并在必要时提出活动:
Public Event SMSListChanged(ByVal someString As String)
Private Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)
.....
RaiseEvent SMSListChanged("Some message to display in MainWindow")
.....
End Sub
然后在MainWindow中处理SMSListChanged事件:
Private WithEvents myOtherClass As New MyOtherClass
Private Sub DisplayMessage(ByVal message As String) Handles myOtherClass.SMSListChanged
'TODO: update textbox with message string from parameter
End Sub
这种方法的优势是避免您的班级承担更新GUI的额外责任,因此可以使其符合某种级别的单一责任。