VB - 如何从另一个线程(串行对象)上运行的类访问数据

时间:2012-11-03 13:05:06

标签: vb.net multithreading serial-port invokerequired

我正在编写一个名为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条件?关于在这种情况下线程如何工作的更多信息也很棒。

1 个答案:

答案 0 :(得分:0)

InvokeRequired是必需的,因为UI只能由创建控件的线程(通常是主线程)修改。

为了“避免”它,设计你的代码以分离责任 - 将UI修改保持在与处理串口的代码不同的层中。

您仍然需要检查某些地方是否InvokeRequired - 您将后端与UI连接 - 但它应该只在一个“图层”中。