0

私はこれを修正する方法を知っていると思いますが、誰かが私が実装しようとしているものよりも良いアイデアを持っている場合はお知らせください.

別のスレッドから UI スレッドのコントロールのプロパティにアクセスしようとすると呼び出しが必要になることは承知していますが、古い " 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

とにかく、invoke を使用して文字列を取得します。

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

なぜこのイベント ハンドラーでこの例外が発生するのか、私はまだ混乱しています。この状況を処理するためのより良い方法があるかどうかを確認することにしました。

4

1 に答える 1