我正在编写一个名为Field的类,它使用一个串行对象从Arduino中获取一些值。我有一个由类引发的事件(当从串口接收数据时,或多或少)当发生这种情况时,我需要从这个类中检索数据。下面的代码有效,但似乎并没有按我需要的方式这样做。我对线程如何工作的了解很少甚至没有,我只知道串口对象在自己的线程中运行,这使得使用它变得非常痛苦。
Private Sub Field_eScore() Handles Field.eScore
If InvokeRequired Then
Invoke(Sub() lbl_COM_data.Text = Field.GetComData())
Else
lbl_COM_data.Text = Field.GetComData()
End If
End Sub
有没有办法轻松访问在这个其他线程中运行的数据,这些数据不涉及这些“InvokeRequired”If-Then条件?关于在这种情况下线程如何工作的更多信息也很棒。
答案 0 :(得分:0)
InvokeRequired
是必需的,因为UI只能由创建控件的线程(通常是主线程)修改。
为了“避免”它,设计你的代码以分离责任 - 将UI修改保持在与处理串口的代码不同的层中。
您仍然需要检查某些地方是否InvokeRequired
- 您将后端与UI连接 - 但它应该只在一个“图层”中。