0

嗨,我有一个运行线程并在进程中更新 UI 的程序。我已将 .invokerequired 用于安全线程,并且一切运行正常。在其中一个线程中,有必要使用在另一个线程中创建的列表框中的项目的值,(ListBox2.Items(index))而我目前正在使用dim item1 as integer =ListBox2.Items(index). 现在程序运行良好并且没有显示异常或错误消息,但是,如果我添加同一行的手表,我会收到以下消息 + AccessibilityObject {"Cross-thread operation not valid: Control 'ListBox2' access from a thread other比创建它的线程。”} System.InvalidOperationException。

正常吗?有没有办法安全地获取位于另一个线程上的列表框中的项目的值?

4

1 回答 1

0

要回答有关跨线程异常的问题,这是正常的,您不能从与创建它们的线程不同的线程访问 ui 元素。要解决此问题,您需要使用 control.invoke() 执行 lambda 表达式以在创建列表框的线程上运行访问代码。

Dim item1 as Integer
If ListBox2.InvokeRequired then
    Listbox2.Invoke(Sub() Item1 = ListBox2.Items(Index))
Else
    Item1 = ListBox2.Items(Index)
End If
于 2013-05-05T12:30:18.097 回答