Практическое руководство. Объявление пользовательских событий для предотвращения блокировки (Visual Basic)
Статья
Существует несколько обстоятельств, когда важно, чтобы один обработчик событий не блокируют последующие обработчики событий. Пользовательские события позволяют событию асинхронно вызывать обработчики событий.
По умолчанию поле резервного хранилища для объявления события — это делегат многоадресной рассылки, который последовательно объединяет все обработчики событий. Это означает, что если один обработчик занимает много времени, он блокирует другие обработчики, пока не завершится. (Обработчики событий, которые хорошо ведут себя, никогда не должны выполнять длительные или потенциально блокирующие операции.)
Вместо использования реализации событий по умолчанию, которые предоставляет Visual Basic, можно использовать настраиваемое событие для асинхронного выполнения обработчиков событий.
Пример
В этом примере AddHandler метод доступа добавляет делегат для каждого обработчика Click события ArrayList в хранящийся в EventHandlerList поле.
Когда код вызывает Click событие, RaiseEvent метод вызывает все делегаты обработчика событий асинхронно с помощью BeginInvoke метода. Этот метод вызывает каждый обработчик в рабочем потоке и возвращает немедленно, поэтому обработчики не могут блокировать друг друга.
VB
PublicNotInheritableClass ReliabilityOptimizedControl
'Defines a list for storing the delegatesPrivate EventHandlerList AsNew ArrayList
'Defines the Click event using the custom event syntax.'The RaiseEvent always invokes the delegates asynchronouslyPublicCustomEvent Click As EventHandler
AddHandler(ByVal value As EventHandler)
EventHandlerList.Add(value)
EndAddHandlerRemoveHandler(ByVal value As EventHandler)
EventHandlerList.Remove(value)
EndRemoveHandlerRaiseEvent(ByVal sender AsObject, ByVal e As EventArgs)
ForEach handler As EventHandler In EventHandlerList
If handler IsNotNothingThen
handler.BeginInvoke(sender, e, Nothing, Nothing)
EndIfNextEndRaiseEventEndEventEndClass
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.
Do you want to know how to add your business logic to existing functionality in Microsoft Dynamics 365 Business Central? In this module, you'll learn how to add code and work with events.