В настоящее время я создаю приложение C#, которое автоматически аутентифицирует пользователя на определенных сетевых ресурсах при их подключении к определенным беспроводным сетям.Соответствующее использование обработчиков событий C#
В настоящее время я использую Managed Wifi API, чтобы узнать, когда пользователь подключается/отключается от беспроводной сети. У меня есть обработчик событий, так что, когда происходит какое-либо из этих действий, один из моих методов вызывается для проверки текущего состояния беспроводного соединения.
Для управления состоянием приложения у меня есть другой класс, который называется «проводником», который выполняет операции, необходимые для изменения состояния приложения. Например, когда беспроводная карта подключается к правильной сети, проводнику необходимо изменить состояние системы с «Мониторинг» на «Аутентификация». Если аутентификация завершается успешно, проводнику необходимо изменить состояние на «Подключено». Отключение приводит к состоянию «Мониторинг» снова, и ошибка аутентификации приводит к состоянию «Ошибка». Эти изменения состояния (если запросы пользователя) могут привести к уведомлениям TrayIcon, поэтому пользователь знает, что они проходят проверку подлинности.
Моя нынешняя идея включает в себя метод, используемый для проверки текущего состояния беспроводного вызова методом «аутентификации» или «разъединения» в диспетчере состояний. Однако я не уверен, что это подходящее использование обработчика событий - следует ли вместо этого устанавливать флаг или отправлять сообщение через какой-либо IPC в отдельный поток, который начнет процесс аутентификации/разъединения?
В дополнение к обработчику событий, способному запросить соединение/разъединение, пользователь может также выполнить его через значок в трее. В результате мне необходимо обеспечить, чтобы эти фоновые операции не блокировали взаимодействие лотка с пользователем.
Только один компонент должен иметь возможность запросить изменение состояния системы в любое время, поэтому мне нужно будет использовать мьютексы для предотвращения одновременных изменений состояния. Однако, как я должен синхронно, остальная часть этих компонентов является для меня небольшой загадкой.
Любые советы или литература, которые я должен был прочитать, были бы оценены. У меня нет формального обучения на языке C#, поэтому я прошу прощения, если я что-то исказил.
EDIT: Самое главное, я хочу проверить, что событие будет выполняться как отдельный поток, поэтому он не сможет заблокировать основной интерфейс. Кроме того, я хочу проверить, что если у меня есть обработчик событий, подписанный на событие, он будет обрабатывать события поочередно, а не параллельно (поэтому, если пользователь подключается и отключается до того, как будет обработано первое событие соединения, два изменения состояния не будут происходящих одновременно).
Избегайте чрезмерного размышления об этом. Просто создайте событие и пусть ваш пользовательский интерфейс реализует его, отключив кнопку «Подключиться». Автоматическая блокировка * и * визуальная обратная связь. –
Вот несколько ссылок для вас. Во-первых, чтобы синхронизировать все, сервисная шина Rhino может помочь. http://hibernatingrhinos.com/open-source/rhino-service-bus Во-вторых, вот отличный пример для потоковой передачи в .NET, начиная с основ и расширяясь до расширенных тем: http://www.yoda.arachsys.com /csharp/threads/index.shtml –