奇数WPF交叉线程问题

奇数WPF交叉线程问题,wpf,vb.net,eventhandler,Wpf,Vb.net,Eventhandler,我想我知道如何解决这个问题,但如果有人有比我要实现的更好的想法,请告诉我 我知道,当试图从另一个线程访问UI线程上控件的属性时,需要调用-但我遇到了一个问题,事件给了我旧的“,调用线程无法访问此对象,因为它是另一个线程拥有的。”错误 现在我的印象是UI线程上发生了一个事件,因此这种跨线程异常不应该有问题。。。以下是我的XML: <MenuItem Header="Search Both" Foreground="Black"> <TextBox Name

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

我知道,当试图从另一个线程访问UI线程上控件的属性时,需要调用-但我遇到了一个问题,事件给了我旧的“
,调用线程无法访问此对象,因为它是另一个线程拥有的。
”错误

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

<MenuItem Header="Search Both" Foreground="Black">
    <TextBox
        Name="SearchBothBox"
        Height="23"
        Width="120"/>
我仍然不明白为什么会在这个事件处理程序中出现这个异常,我想我应该检查一下是否有更好的方法来处理这种情况。

在这一行:

Dim SearchThread As New Thread(Sub() Search(Me.SearchBothBox.Text, 1))
您正在尝试访问UI线程以外的线程上的UI控件(TextBox.TextProperty)属性。因此问题就来了


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

查看Dispatchermer。
将SearchThread作为新线程设置为Dim New thread
这不会创建新线程吗?访问该线程上的文本框是您获得异常的原因。为什么要麻烦呢?在开始线程之前读取文本框非常简单。还可以查看线程池、任务等,以及结果是如何显示的?@Henkholtman我确实经常使用taks,但在这种情况下,我只是使用线程在数据网格中选择一行-我不想检查它是否已完成或返回,所以我不想使用任务。啊,当然。我应该注意到这一点。我总是认为sub在新线程上运行,而不一定是在新线程上启动sub的命令。我必须记住这一点。再次感谢!
    Dim SearchString As String
    Me.Dispatcher.Invoke(New Action(Sub() SearchString = Me.SearchBothBox.Text))
Dim SearchThread As New Thread(Sub() Search(Me.SearchBothBox.Text, 1))