好吧所以我设置了一个事件处理程序,当连接到计算机串口的设备收到带有此代码的文本消息时触发该事件处理程序:
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写入其中
答案 0 :(得分:0)
如果我不误解这个问题,你可以使用Event来实现这个目标。在课程中声明一个您有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的额外责任,因此可以使其在某个级别符合Single Responsibility Priciple 。