7

我正在尝试将文本设置为标签Label_caller.Text = phone_number,但出现此错误:“System.InvalidOperationException:跨线程操作无效:控制'Label_caller'从创建它的线程以外的线程访问。” 我该如何克服这个问题?如何使用关键字 Me.?

4

2 回答 2

19

在 Windows 中,您只能在 UI 线程上访问 UI 元素。因此,如果您需要从另一个线程访问它们,您可能需要在 UI 线程上调用该操作。

您需要使用以下方法来更新文本框。这将检查是否需要在主线程上调用,如果需要,在 UI 线程上调用相同的方法。

Private Sub UpdateTextBox(ByVal phone_number As String)
    If Me.InvokeRequired Then
        Dim args() As String = {phone_number}
        Me.Invoke(New Action(Of String)(AddressOf UpdateTextBox), args)
        Return
    End IF
    Label_caller.Text = phone_number
End Sub
于 2013-11-08T12:04:37.610 回答
0

我可能回答得很晚,但在表单加载事件中添加以下代码似乎可以解决问题。

不确定它是否是完美的答案:

System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False
于 2017-09-20T14:09:32.640 回答