Отложенная обработка событий - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, предположим, у нас есть

Логика

и

Отображение

. Отображение подписано на событие

НовыйОбъект

, рассылаемое

Логикой

и когда оно происходит

Отображение

рендерит новый объект. Это означает, что метод

Отображения

, рендерящий

НовыйОбъект

, будет вызван непосредственно при выполнении кода

Логики

. Мне это не нравится по религиозным причинам, хотелось бы, что бы код

Отображения

выполнялся только когда придет его черед, а не во время

выполнения

Логики

. Пока решил создать List и добавлять туда

НовыеОбъекты

во время выполнения Логики, а после перебирать его в цикле и рендерить

НовыеОбъекты

. Между итерациями List очищается. Я не уверен на сколько это медленнее чем события, но то что менее удобно - это точно. Есть ли другие способы?

Решение задачи: «Отложенная обработка событий»

textual
Листинг программы
class Logic
{
    public event BombExplosion;
    public List<Bomb> Bombs = new List<Bomb>();
    public BombBoom(Bomb b)
    {
         //тут происходит обработка логики взрыва и помечаем все бомбы, которые взорвались 
        // статусом "Взрывается"
       foreach(Bomb b in this){
         if(...) b.status = BompStatus.Detoneted; }
//только после обработки вызываем метод/событие
        if(BombExplosion!=null) BombExplosion(this.Where(w=>w.status == BompStatus.Detoneted).ToList());
    }
}
public  enum BompStatus{
   Visible, Unvisible, Detoneted, Destroyed
}
class Bomb {
 public  BompStatus status
}
class Render
{
    public void RenderBombExplosion(Bombs bomb)
    {
        // и тут рендерим все сдетонировавшие бомбы
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5