刷新窗体,即使不是活动窗口也是如此

时间:2013-01-23 10:05:42

标签: c# windows winforms

我正在尝试一些非常基本的东西。

我的Windows窗体上有3个标签,我想从数据库中的3个独立查询填充,但也向用户显示正在发生的事情,我想显示每个标签,因为数据可从各自的查询。

为此,我可以使用:

Form.ActiveForm.Refresh();

但是,如果用户点击其桌面上的任何其他窗口,该命令将失败,并显示“object not set”错误。

是否有任何方法可以刷新表单上的标签,即使表单窗口不是活动窗口?

// 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 个答案:

答案 0 :(得分:4)

标签将在详细说明结束时自动刷新。

您可能希望强制刷新在详细说明过程中更新标签,您只需使用this.Refresh()即可,因为我怀疑该方法位于表单类中。

但是,当您需要详细说明并且需要保持UI更新和反应(即未冻结)时,建议的方法是避免在UI线程上进行详细说明,而是使用{{在另一个线程上委托工作3}}

BackGroundWorker BackGroundWorker用法的一个工作示例。