2013-01-23 34 views
2

我正在嘗試一些非常基本的東西。刷新窗體,即使不是活動窗口

我在我的Windows窗體上有3個標籤,我想從數據庫中的3個不同的查詢中填充,還要顯示用戶正在發生的事情,我想在數據可用時顯示每個標籤來自相應的查詢。

要做到這一點,我可以使用:

Form.ActiveForm.Refresh(); 

然而,如果用戶點擊桌面上的任何其他窗口,該命令將失敗,並「對象未設置」錯誤。

有什麼辦法可以刷新窗體上的標籤,即使表單窗口不是活動窗口?

// Breach within next hour 
DataTable tbBreach = (get info from database) 
tbBreach.DefaultView.Sort = "Assignee ASC"; 
dgBreach.DataSource = tbBreach; 
lbBreach2.Text = tbBreach.Rows.Count.ToString(); 
Form.ActiveForm.Refresh(); //Would like to update this form field now, and show it on the form 

// Breach within next 24 hour 
DataTable tbBreach24 = (get info from database) 
tbBreach24.DefaultView.Sort = "Assignee ASC"; 
dgBreach24.DataSource = tbBreach24; 
lbBreach24.Text = tbBreach24.Rows.Count.ToString(); 
Form.ActiveForm.Refresh(); 

謝謝

馬克

+1

原則上,不需要刷新,因爲只要設置Text屬性,標籤就會自動刷新。您是否嘗試刪除刷新行? – digEmAll

+0

嗨@digEmAll - 是的 - 如果我刪除它們,標籤似乎不會更新,直到函數結束(上面的是當有人點擊「更新數字」按鈕時執行),就好像更新表單(或者至少刷新它)根本沒有完成,直到函數完成 - 這就是爲什麼我認爲我可以在每個標籤之後添加Refresh(),但是這會導致錯誤,如果用戶沒有窗口,窗體是on,in focus。非常感謝。 – Mark

回答

3

標籤將自動在擬訂結束被刷新。

您可能想強制更新以在更新過程中更新標籤,並且您可以簡單地使用this.Refresh(),因爲我懷疑該方法位於表單類中。

但是,當您需要長時間闡述並且需要保持UI已更新且被動(即未凍結)時,建議的方法是避免在UI線程上進行細化,而是使用BackGroundWorker將工作委託給另一個線程。

Here's BackGroundWorker使用的一個工作示例。

+0

添加了BackGroundWorker的示例。 – digEmAll