2014-09-03 45 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