我有一个应用程序执行以下操作:
一个组件查找数据库中的更改
对于每个更改,都会在存储更改警报信息的表中添加一行
另一个组件查找警报
对于每个警报,会弹出一个警告表单
以前,我的代码只能一次显示一个警报,而且工作正常。现在,我正在更改我的代码以允许同时打开多个警报表单。
while(true)
{
DB = //pseudocode: database object
Var ResultAlert =
from a in DB.Alerts
where a.Status == 0;
foreach(var RowAlert in ResultAlert)
{
AlertForm f = new AlertForm(RowAlert.Id);
f.Show();
}
Thread.Sleep(1000);
}
正如您所看到的,此代码将每秒检查一次新警报,这一切都很好,但它可能会每秒打开重复警报表单。我想知道的是如何检测哪些表单是打开的(使用相应的alertIds),所以我只能打开新的警报窗口。
答案 0 :(得分:1)
您需要跟踪为每个提醒打开的表单。假设您的Alerts表具有整数主键(例如AlertId),您可以在字典中跟踪它们:
var openForms = new Dictionary<int, AlertForm>();
while(true)
{
DB = //pseudocode: database object
Var ResultAlert =
from a in DB.Alerts
where a.Status = 0;
foreach(var RowAlert in ResultAlert)
{
var alertId = RowAlert.AlertId;
if(!openForms.ContainsKey(alertId))
{
AlertForm f = new AlertForm();
openForms.Add(alertId, f);
f.Show();
}
}
Thread.Sleep(1000);
}
如果您不需要对打开的表单执行任何操作,那么您只需将ID存储在HashSet<int>
中。