2013-05-05 57 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