2014-09-03 72 views
0

我正在製作一個程序,該程序檢查數據集中是否存在數據問題,如果發現問題,則需要將問題寫入列表框。 由於這是一個非常漫長的過程,我使用異步並等待關鍵字,以便用戶可以繼續使用其他Windows。task.run中的異步更新列表框

在按鈕處理程序,我寫了下面的代碼:

Private Async Sub BtnIniciar_Click(sender As Object, e As EventArgs) Handles BtnIniciar.Click 
(...) 
Await ValidaFracoesRepetidas() 
(...) 
End Sub 

在子,我想做到以下幾點:

Private Async Function ValidaFracoesRepetidas() As Task 
     Await Task.Run(Sub() 
     (...) 
     ListProblems.Items.Add("the building " & edf.EdificioId & " has repeated rooms " & frac(i) & " in floor " & patual) 
     (...) 
     End Sub) 
End Function 

但一旦到達ListProblems.Items 。添加程序會引發異常。 我想知道是否有方法從另一個線程寫入UI中的列表框。如果不能,我可以返回一個Task(Of List(Of String)),然後在ui線程中使用For Each將值寫入ListBox?

注意:ListProblems是UI(Windows窗體)中列表框的名稱,如果您需要顯示更多代碼,請詢問我將給您更多。

非常感謝您的關注和遺憾,因爲我在多線程一個很初級,

最好的問候,

回答

0

嘗試是這樣的(我是一個C#開發):

Private Async Function ValidaFracoesRepetidas() As Task 
    Await Task.Run(Sub() 
     (...) 
     End Sub) 
    ListProblems.Items.Add(...) 
    Await Task.Run(Sub() 
     (...) 
     End Sub) 
End Function 
+0

非常感謝!你解決了我的問題。 – Digmoons 2014-09-03 14:10:54