Как узнать, открыта ли определенная форма? - PullRequest
0 голосов
/ 26 июня 2010

У меня есть приложение, которое выполняет следующее:

один компонент ищет изменения в базе данныхДля каждого изменения в таблицу добавляется строка, в которой хранится информация об оповещениях об изменениях

Другой компонент ищет оповещенияДля каждого предупреждения выскакивает форма предупреждения

Раньше у меня был код, показывающий только одно предупреждение за раз, и все работало просто отлично.Теперь я изменяю свой код, чтобы разрешить одновременное открытие нескольких форм предупреждений.

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);
}

Итак, как вы можете видеть, этот код будет проверять наличие новых предупреждений каждую секунду, что хорошо, но потенциально может открывать повторные формы предупреждений каждую секунду.Я хочу знать, как определить, какие формы открыты (с соответствующими оповещениями), чтобы я мог открывать только новые окна оповещений.

1 Ответ

1 голос
/ 26 июня 2010

Вам необходимо отслеживать формы, которые вы открывали для каждого оповещения. Предполагая, что ваша таблица оповещений имеет целочисленный первичный ключ (например, 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);
}

Если вам не нужно ничего делать с открытыми формами, тогда вы можете просто сохранить идентификаторы в HashSet<int>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...