Несколько рекомендаций, как избежать блокировки обработчиков событий в сложных приложениях:
- Использовать настраиваемые события для асинхронного выполнения обработчиков. 1 Например, в Visual Basic для этого нужно вызвать метод BeginInvoke, который вызывает каждый обработчик в рабочем потоке и возвращает немедленно, поэтому обработчики не могут блокировать друг друга. 1
- Не выполнять в обработчиках событий длительные или потенциально блокирующие операции. 1
- Предоставить длительно выполняющимся процессам собственные потоки или вызвать их с помощью async. 3
- Изменить методологию обработки. 3 Элементы, требующие обработки, нужно добавить в объект очереди и использовать текущий таймер для запуска работы в очереди, а затем изменить логику обработки на пул потоков. 3
Также для снижения риска возникновения взаимоблокировок рекомендуется избегать явного захвата ресурсов и придерживаться одинакового порядка их захвата. 4