我正在尝试一些非常基本的东西。
我的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();
谢谢,
标记
答案 0 :(得分:4)
标签将在详细说明结束时自动刷新。
您可能希望强制刷新在详细说明过程中更新标签,您只需使用this.Refresh()
即可,因为我怀疑该方法位于表单类中。
但是,当您需要详细说明并且需要保持UI更新和反应(即未冻结)时,建议的方法是避免在UI线程上进行详细说明,而是使用{{在另一个线程上委托工作3}}
BackGroundWorker
BackGroundWorker用法的一个工作示例。