[英]c# Async/Await not updating UI
我正在學習對我的一項任務實施異步/等待,這需要很長時間才能完成。 任務完成后,應更新DGV。
private async void frmA_DragDrop(object sender, DragEventArgs e)
{
// Some codes to accept dropped files
// Run task asynchronously
Task<DataTable> task = Task.Run(() => PDF.CheckPDFs(Files, tblPDFs));
dgvPDF.DataSource = await task;
}
我發現任務完成后,它沒有更新DGV。 因此,我添加了InvokeRequired位來手動更新表並防止跨線程異常。
// Update UI
if (dgvPDF.InvokeRequired)
{
dgvPDF.Invoke((MethodInvoker)(() => { dgvPDF.Refresh(); }));
}
else
{
dgvPDF.Refresh();
}
我還有一個單獨的事件處理程序,突出顯示紅色行是文件無效:
private void dgvPDF_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
if (dgvPDF["Pages",e.RowIndex].Value.ToString() == "0")
dgvPDF.Rows[e.RowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.MistyRose;
}
發生的事情是根本沒有觸發RowAdded事件處理程序。 如果我使代碼同步(即刪除await / async並調用),那么除了UI凍結外,一切都可以正常工作
我的問題是使用InvokedRequired在異步等待中更新UI的正確方法嗎? 我該怎么做才能解決此問題?
不,您不必“調用”,在異步方法調用完成后,上下文將切換回去,即,等待后的語句將在UI線程中執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.