奇怪的WPF跨线程问题

时间:2014-08-11 16:56:52

标签: wpf vb.net eventhandler

我想我知道如何解决这个问题,但如果有人比我要实施的更好,请告诉我。

我知道当尝试从另一个线程访问UI线程上的控件的属性时需要调用 - 但是我遇到了一个问题,这个事件给了我一个旧的& #34; The calling thread cannot access this object because a different thread owns it."错误。

现在我的印象是UI线程上发生了一个事件,因此不应该遇到这种跨线程异常的问题......这就是我的XML:

<MenuItem Header="Search Both" Foreground="Black">
    <TextBox
        Name="SearchBothBox"
        Height="23"
        Width="120"/>

以下是相关按键事件的代码:

Private Sub SearchBothBox_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles SearchBothBox.KeyDown
    If e.Key = Key.Enter Then
        Dim SearchThread As New Thread(Sub() Search(Me.SearchBothBox.Text, 1))  <-- Exception occurs here when accessing SearcbhBothBox.Text
        SearchThread.Start()
    End If
End Sub

无论如何,我将使用调用来拉入字符串。

    Dim SearchString As String
    Me.Dispatcher.Invoke(New Action(Sub() SearchString = Me.SearchBothBox.Text))

我仍然很困惑为什么我会在这个事件处理程序上得到这个例外,我想我会检查是否有更好的方法来处理这种情况。

1 个答案:

答案 0 :(得分:1)

这一行:

Dim SearchThread As New Thread(Sub() Search(Me.SearchBothBox.Text, 1))

尝试在UI线程以外的线程上访问UI控件(TextBox.TextProperty)属性 。因此问题。

事件处理程序确实在UI线程上调用,但是从它启动了另一个线程并尝试从那里访问UI属性。