Создание собственного пользовательского цикла.Цикл обработки сетевых событий

StackOverflow https://stackoverflow.com/questions/162696

  •  03-07-2019
  •  | 
  •  

Вопрос

Несколько лет назад я прочитал книгу, в которой описывалось, как вы могли бы переопределить реализацию диспетчера событий по умолчанию в .NET с помощью вашего собственного процессора.

    class foo {
       public event EventHandler myEvent;
       ...
    }

    ...
      myFoo.myEvent += myBar1.EventHandler;
      myFoo.myEvent += myBar2.EventHandler;

Всякий раз, когда срабатывает событие, будут вызываться обработчики myBar1 и myBar2.

Насколько я помню, реализация этого цикла по умолчанию использует связанный список и просто выполняет итерацию по списку и вызывает делегаты EventHandler по порядку.

Мой вопрос двоякий:

  1. Кто-нибудь знает, какую книгу я читал?
  2. Почему вы хотите переопределить реализацию по умолчанию (на которую можно найти ответ в книге)?

Редактировать:Книга, на которую я ссылался, действительно была CLR Джеффри Рихтера через C#

Это было полезно?

Решение

Это могла быть одна из многих книг или статей в Интернете.

Существуют различные причины, по которым вы можете захотеть изменить способ подписки на события:

  • Если у вас много мероприятий, на многие из которых вы, возможно, не подписаны, вы можете захотеть использовать Список обработчиков событий чтобы снизить использование вашей памяти
  • Возможно, вы захотите зарегистрировать подписку / отказ от подписки
  • Возможно, вы захотите использовать слабую ссылку, чтобы время жизни подписчика не было привязано к вашему
  • Возможно, вы захотите изменить блокировку, связанную с подпиской /отказом от подписки

Я уверен, что есть и другие - они у меня в голове не укладываются :)

Редактировать:Также обратите внимание, что есть разница между пользовательским способом обработки подписки / отмены подписки и пользовательским способом вызова события (которое может вызывать GetInvocationList и гарантировать, что вызываются все обработчики, независимо от исключений, например).

Другие советы

Кажется, я помню нечто подобное в CLR Джеффри Рихтера через C #. Изменить . Я точно помню, что он подробно об этом рассказывает.

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

<Ол>
  • Нет
  • Например, вам может потребоваться разорвать цепочку вызовов на основе результата одного из обработчиков. Скажем, у вашего объекта CustomEventArgs есть свойство Blocked, которое при значении true подавляет все последующие вызовы обработчиков событий.
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top