我如何解决:Visual Basic编码中的跨线程访问问题?

时间:2019-06-02 18:53:26

标签: vb.net

请检查所附图片。 我想通过串行端口将其他应用程序的数据接收到Visual Studio Windows窗体中,并将​​某些条件应用于接收到的数据,如图所示,但不幸的是我遇到了此错误,我尝试进行更多的修复,但徒劳无功。 我想请您帮助解决这个问题并编辑我的代码。 谢谢

Private Sub SerialPort1_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived


        Dim value As Byte = SerialPort1.ReadLine()

        If (((value) & 2) <> 0) Then

            Label4.Visible = True
        End If
    End Sub

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        SerialPort1.Open()
    End Sub

2 个答案:

答案 0 :(得分:1)

我认为您在使用串行端口读取时无法直接访问label4。 尝试将private void grdRead_Loaded(object sender, RoutedEventArgs e) { using (var ctx = new EntContext()) { //What do I write here? } } 替换为:

Label4.Visible = True

答案 1 :(得分:1)

@Devcon:不要使用Invoke,因为它经常会导致死锁,请始终使用BeginInvoke(我将使用目标控件的方法和属性,而不是表单的属性,但是通常没关系)。

With Label4
    If .InvokeRequired Then
        .BeginInvoke(Sub() .Visible = True)
    Else
        .Visible = True
    End If
End With