2012-06-22 16 views
0

我有一個需要處理的項目列表框,我想在一個單獨的線程上異步處理它們。 (之前從未這樣做過)。與VB.NET中的GUI控件異步工作

因此,我創建了一個委託,一個回調,調用列表框項目上的工作的方法。

我得到一個異常「System.InvalidOperationException」: 跨線程操作無效:控制'ListBoxBlah'從其創建線程以外的線程訪問。

爲單個項目執行異步操作對我來說沒有意義,因爲我只是在後臺執行大量操作(列表框可能有20000項),而允許用戶執行其他操作東東。

要使用GUI,這必須成爲更復雜的互動......我只是不知道如何:

Public Sub F(ByVal ext As String) 
    If ListBoxBlah.SelectedIndex = -1 Then Return 
    'Process ListBoxBlah 
End Sub 

Delegate Sub E(ByVal ext As String) 

Sub Callback(ByVal ar As IAsyncResult) 
    Dim t As E = CType(CType(ar, System.Runtime.Remoting.Messaging.AsyncResult).AsyncDelegate, E) 
    t.EndInvoke(ar) 
End Sub 

Public Sub Ex() 
    Dim t As E = AddressOf F 
    t.BeginInvoke("ext", AddressOf Callback, "state") 
End Sub 
+0

你可以更具體地說明你的意思是「處理」嗎?用戶是否從列表框中添加和刪除項目?是否應該在「處理」發生時允許這樣做?是否需要讓「處理」知道列表框數據的變化,還是隻需要處理數據快照? –

+0

當你說你有一個項目列表框時,我假設你想要列表(例如產品編號列表),並在背景中做某些事情是的?如果這樣看看BackgroundWorker進程。這是初學者想要做異步工作的最佳方式http://bit.ly/320a66 –

+0

他們需要使用選定的項目,不添加或刪除 - 但他們需要完全訪問選定的項目(如文件路徑)(和該列表傾向於刷新或使用不屬於我的線程的項目) – Thalia

回答