如何知道某种形式是否开放?

时间:2010-06-25 20:31:36

标签: c# winforms linq

我有一个应用程序执行以下操作:

一个组件查找数据库中的更改
对于每个更改,都会在存储更改警报信息的表中添加一行

另一个组件查找警报
对于每个警报,会弹出一个警告表单

以前,我的代码只能一次显示一个警报,而且工作正常。现在,我正在更改我的代码以允许同时打开多个警报表单。

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),所以我只能打开新的警报窗口。

1 个答案:

答案 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>中。