2013-05-05 36 views
0

嗨,我有一个程序运行线程并更新过程中的用户界面。我已经使用.invokerequired安全线程,一切都运行正常。在其中一个线程中,需要使用另一个线程(ListBox2.Items(index))中创建的列表框中的项目的值,并且我正在使用dim item1 as integer =ListBox2.Items(index)执行此操作。现在程序运行良好,并没有显示任何异常或错误消息,但是,如果我添加同一行的手表,我会收到以下消息+ AccessibilityObject {“跨线程操作无效:控制'ListBox2'从其他线程访问而不是它在其上创建的线程。“} System.InvalidOperationException。在线程中安全地获取列表框项目值

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

+0

使用委托,或者只是使用后台工作。 – Codexer 2013-05-05 06:54:24

+0

您可以在此处查看更多:http://stackoverflow.com/questions/3969476/how-to-pass-a-variable-to-another-thread – Codexer 2013-05-05 07:00:02

+0

我无法使用委托来获取(ListBox2的值)。项目(指数))。我不需要对UI进行任何更改,我只想以线程安全的方式获取ListBox2.Items(index)的值。 – user2334436 2013-05-05 09:04:10

回答

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