0
我正在學習異步/等待,並試圖將它們合併到我的代碼中,因爲某些操作對UI有輕微的影響。等待/異步跨線程調用?
在Form1類我有一個:
Private Async Sub Populate(sender As Object, e As EventArgs)
Await Task.Run(Sub() PopulateGrid(query, dgv, {Button1, Button2}))
End Sub
PopulateGrid
是另一個類,以及類似的方法:
Public Shared Sub PopulateGrid(query as DataTable, dgv as DataGridView, menuButtons() as ToolStripButton)
Try
dgv.DataSource = query
...
...
Finally
SetMenuButtonStates(dgv.CurrentRow IsNot Nothing, menuButtons)
End Try
End Sub
的錯誤是在SetMenuButtonStates
,因爲這又是另一類,引發跨線程異常...
我該怎麼辦?
是的,你打電話給'Task.Run',這樣就會在非UI線程上執行'PopulateGrid'。你應該很小心地使'PopulateGrid'成爲一個異步方法 - 然後從'Populate'調用它。 –
您應該從UI獲取數據,等待處理數據的後臺函數,然後用'Populate'中的結果更新UI。目前你的背景功能觸及UI中太多必須修改的東西。 –
我這樣做了,我明白我必須在'dgv.DataSource = query'位上放置'Await Task.Run'?它引發'dgv'上的異常,因爲它來自Form1 ... – AwonDanag