我正在制作一个程序,用于检查数据集中是否存在数据问题,如果找到了某些内容,则需要将问题写入列表框。 由于这是一个非常漫长的过程,我使用异步和等待关键字,以便用户可以继续使用其他Windows。
在按钮处理程序中,我编写了以下代码:
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.Add,该程序就会抛出异常。 我想知道是否有办法从另一个线程写入UI中的列表框。如果没有,我可以返回一个Task(Of List(Of String))然后在ui线程中将值写入ListBox并使用For Each吗?
注意:ListProblems是ui(windows窗体)中列表框的名称,如果您需要我显示更多代码,请询问,我会给你更多。
非常感谢您的关注和抱歉,因为我是多线程的初学者,
最诚挚的问候,
答案 0 :(得分:0)
尝试这样的事情(我是C#dev):
Private Async Function ValidaFracoesRepetidas() As Task
Await Task.Run(Sub()
(...)
End Sub)
ListProblems.Items.Add(...)
Await Task.Run(Sub()
(...)
End Sub)
End Function