Обработка событий объекта внутри коллекций - PullRequest
1 голос
/ 24 сентября 2010

Как правильно обрабатывать события объектов внутри коллекции?

Пример: у меня есть List<Ping>, который асинхронно пингует несколько серверов. Как я могу узнать, вызвал ли один из элементов в списке событие PingCompleted? Что делать, если я добавляю / удаляю объекты Ping?

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

Коллекция лучше, чем Список для наследования:

class PingCollection : Collection<Ping>
{
    protected override void InsertItem(int index, Ping item)
    {
        ping.PingCompleted += PingCompleted

        base.InsertItem(index, item);
    }

    private void PingCompleted(object sender, EventArgs e)
    {
        // do stuff
    }
}

И не забудьте отменить подписку на удаление.

(отредактировано по предложению Дэна)

1 голос
/ 24 сентября 2010

Вам необходимо установить обработчик событий для каждого экземпляра Ping. Внутри обработчика событий вы можете проверить параметр source, чтобы определить объект Ping, вызвавший событие. Не забудьте удалить ссылку на обработчик, как только вы закончите использовать объект, чтобы помочь сборщику мусора выполнить свою работу.

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