我試圖運行一些異步的東西。這裏是我的代碼:同步操作使用異步/等待(主要是留在UI線程上)
private async void SearchButton_Click(object sender, EventArgs e)
{
await Search();
}
// Inside search there is no async operation
public Task Search()
{
// search for data in DB
// update DataGridView and other elements on UI
// How to return null/void/nothing?
return ???;
}
它是非法的/不好的做法,等待上同步的方法,如Search()
?我知道我可以使用Task.Run(Search)
來代替,但是Search()
將在另一個線程上執行(不在UI線程上),我必須經常在Search()
內部使用Invoke()
。
我將Search()
方法的返回值從'void'更改爲'Task',使其等待,但是我必須返回什麼?
如果您正在進行數據庫操作,您不想停留在UI線程上,因爲它會使UI掛起。在單獨的線程上以正確的方式做到這一點。嘗試從操縱UI的代碼中分離出數據庫代碼爲不同的方法。 – MgSam
好,所以選項2應該是更好的方法,因爲它不會在UI線程上執行? – AlmightyMato