Являются ли события формы окна .NET (например, нажатие кнопки) синхронными или асинхронными? - PullRequest
1 голос
/ 27 января 2011

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

Я знаю, что могу предотвратить это, отключив кнопку при первом нажатии, но я хотел бы знать, являются ли они синхронизированными или асинхронными?

Спасибо, Canice.

Ответы [ 3 ]

1 голос
/ 27 января 2011

Они синхронны , но не сериализованы .Существует возможность повторного входа.

Похоже, ваш обработчик нажатий кнопок запускает вложенный цикл сообщений, прямо или косвенно.В этом случае обработчик может быть снова вызван до того, как возвращается первый.

1 голос
/ 27 января 2011

Все зависит от того, как была настроена и запрограммирована форма окна. Если пользовательский интерфейс работает в своем собственном потоке или щелчки кнопок подключены для выполнения в качестве фонового запроса, вы увидите их как события Async. Однако, если они не были подключены таким образом, вы увидите их как события синхронизации.

Итак, не зная больше о том, как была запрограммирована эта форма Windows, ответ будет , это зависит .

0 голосов
/ 27 января 2011

По умолчанию, обычно не так, хотя то, как работает насос сообщений Windows, иногда может имитировать его.Конечно, это также зависит от того, как вы определяете «синхронный» и «асинхронный».

Как правило, когда вы нажимаете кнопку, поток графического интерфейса обычно не возвращается, пока не будут выполнены метод и любые синхронные методы, которые он вызывает.Вот почему пользовательский интерфейс «зависает» при выполнении интенсивной работы процессора в обработчике событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...