1
我有一個簡單的程序,當按下按鈕時循環遍歷結果集並對此結果集執行操作(存儲在DataTable
中)。在循環過程中,我更新了RichTextBox
,2個標籤和ToolStripStatusLabel
的文本。這些在循環過程中不會令人耳目一新,因此在循環中處理每個項目之後,我會執行this.Refresh()
。這種方式是有效的,除非我點擊程序中的任何內容,此時它說它沒有響應,並且在foreach
循環完成之前沒有任何內容被刷新。.NET窗體窗體刷新控件
private void myBtn_Click(object sender, EventArgs e)
{
// Query database and store results in DataTable dt.
foreach (DataRow dr in dt.Rows)
{
// Process row data.
// Update RichTextBox, labels, and ToolStripStatusLabel.
this.Refresh();
}
}
這裏有什麼問題嗎?有一個更好的方法嗎?這是一個使用C#的Windows Forms應用程序。
如果我將這個邏輯移動到後臺線程不會鎖定在該線程?或者可能調用this.Refresh從主線程從後臺線程? – 2009-09-30 15:53:06
你的後臺線程會很忙,但它不會影響GUI(你的程序會保持resonsive)。您需要使用Invoke(或BeginInvoke)從後臺線程對GUI進行更改。 – 2009-09-30 15:55:58
通過在後臺工作中處理此邏輯並通過委託/調用更新ui來實現它。謝謝 – 2009-09-30 21:30:17