0

我确定这是一个简单的问题。我从串口读取了一些数据,在某个解析点,我需要更新一些状态标签。令人惊讶的是,状态标签是线程安全的......我不知道......

好的,但是状态标签需要包含一些似乎不是线程安全的组合文本

statLabel1.Text = "已连接到 " & cmbPort.text & ",找到并且开心"

所以我试图从任何component.text创建一个“读取安全”的功能,但我失败了......

Private Delegate Function ControlGetTextDelegate(ByRef cmp As Control) As String
Public Function ControlGetText(ByRef cmp As Control) As String

    Dim s As String = ""

    ' control invoked from another thread ?
    If cmp.InvokeRequired Then ' YES, so call through delegate

        Dim dlg As New ControlGetTextDelegate(AddressOf ControlGetText)
        cmp.BeginInvoke(dlg, {cmp})

    Else ' NO, so call normally
        s = cmp.Text
    End If

    Return s

End Function

有人可以提供一点帮助吗?

4

1 回答 1

0

我认为您的问题是您没有为 when 分配任何s东西InvokeRequired = True

您可以将结果分配给s(您需要使用它Invoke而不是BeginInvoke),但最好调用您从中调用它的事件处理程序。您没有发布该代码,但它基本上是相同的想法 -InvokeRequired在表单上测试它,然后调用BeginInvoke事件处理程序本身。

于 2012-11-30T16:14:22.793 回答