TL; DR: Могу ли я сделать обработчик, прикрепленный ко многим событиям, только один раз, даже если я знаю, что все события будут уволены?Mulitple Events, Один обработчик называется один раз
Я пытаюсь выслушать коллекцию объектов, каждая из которых выполнит конкретную задачу, а затем уведомит владельца о том, что она завершена. Для этого я просто зациклился на коллекции и добавил обработчик событий для каждого объекта.
foreach(var obj in collection)
{
obj.Event += GroupHandler;
}
и это прекрасно работает. Однако, поскольку я знаю, что задачи будут выполняться примерно в одно и то же время, и поскольку это действительно не имеет значения, если я стану в очереди немного раньше, я бы хотел, чтобы после того, как GroupHandler поднят, он снова не будет поднят для текущего исполнения набора, так что я мог бы сделать что-то вроде:
private void GroupHandler(object sender, EventArgs e)
{
foreach(var obj in collection)
{
obj.QueueNext();
}
}
в идеале я бы в конечном итоге с чем-то вроде
private void GroupHandler(object sender, EventArgs e)
{
if(GroupHandler.HasRun) return;
foreach(var obj in collection)
{
obj.QueueNext();
}
}
Я знаю, что я мог бы использовать некоторые глобальные BOOL (или скорее в Int для отслеживания циклов), но мне это не нравится как решение. Я ищу что-то более приятное, чем это.
Отсоедините событие от объектов при первом вызове. – Gusman
Но я хотел бы, чтобы они снова поднялись на более поздний срок. Вероятно, через 15-20 секунд вниз по дороге –
Затем снова подключите их, но я верю, что вы не замечаете проблему, если вам все равно, какой из объектов закончен, а затем просто присоедините к одному из объектов. – Gusman