我有一些在我的WinForms應用程序中運行的重任務。問題是,它在運行時會凍結UI(UI主線程)。在C中異步運行任務#
我還沒有在C#中的線程和委託中工作太多,這就是爲什麼我希望有人可以幫助我,如何處理這些流程繁重的任務,而不凍結用戶界面,所以用戶不認爲該應用在等待時崩潰了?
例如,我已經通過我的FrontController
一個電話,這需要時間:
_controller.testExportExcel(wrapper, saveDialog.FileName);
,因爲它是創建一個Excel文件。我不會在應用程序工作時在UI上做出響應。
的過程,任務重的另一個例子是這樣的:
private void dataGridView_liste_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
if (e.ListChangedType != ListChangedType.ItemDeleted)
{
foreach (DataGridViewRow r in dataGridView_liste.Rows)
{
DataGridViewCellStyle red = dataGridView_liste.DefaultCellStyle.Clone();
red.BackColor = Color.LightGreen;
if (r.Cells["News"].Value != null && (bool)r.Cells["News"].Value == true)
r.DefaultCellStyle = red;
}
}
}
凡foreach
循環需要一定的時間,並凍結UI。一個異步線程運行進程並在完成時自動關閉,這可能對我有用。但它是如何工作的?
對於'BackgroundWorker'的excel創建外觀。對於第二個循環,所有的代碼都是一個UI代碼,所以它不能被線程化,但它看起來不像一個長時間運行的代碼。你有多少行?你也可以暫停網格繪畫,它可能會有所幫助。 –
您確定這不是重複的嗎? SO有很多類似的問題... –
@AmiramKorach下週將嘗試BackgroundWorker進行方法調用,看看它是否可以幫助我。第二個循環有大約512多行,並且整個想法是爲了視覺上的原因在每行中創建背景綠色。 難道根本就不可能在UI中創建異步運行,所以加載內容時UI不會凍結?和/或使負載微調,顯示用戶界面正在加載???? – grmihel