您好我有一个程序可以运行线程并在此过程中更新UI。我使用.invokerequired进行安全线程,一切运行正常。在其中一个线程中,必须使用列表框中的项目的值,该项目在另一个线程(ListBox2.Items(index))
中创建,并且我目前正在使用dim item1 as integer =ListBox2.Items(index)
执行此操作。现在程序运行正常并且没有显示异常或错误消息,但是,如果我添加相同行的监视,我会得到以下消息+ AccessibilityObject {"跨线程操作无效:控制' ListBox2& #39;从其创建的线程以外的线程访问。"} System.InvalidOperationException。
这是正常的吗?有没有办法安全地获取列表框中位于另一个线程上的项目的值?
答案 0 :(得分: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