在线程中安全地获取列表框项值

时间:2013-05-05 05:53:15

标签: vb.net invoke

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

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

1 个答案:

答案 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