我目前正在构建一个 C# 应用程序,当用户连接到特定的无线网络时,它将自动针对某些网络资源对用户进行身份验证。
目前,我正在使用托管 Wifi API来发现用户何时连接/断开无线网络。我有一个事件处理程序,因此当发生任何这些活动时,会调用我的一个方法来检查无线连接的当前状态。
为了管理应用程序的状态,我有另一个称为“导体”的类,它执行更改应用程序状态所需的操作。例如,当无线网卡连接到正确的网络时,指挥需要将系统状态从“监控”更改为“验证”。如果身份验证成功,指挥者需要将状态更改为“已连接”。断开连接会再次导致“监控”状态,而身份验证错误会导致“错误”状态。这些状态更改(如果用户请求)可能会导致 TrayIcon 通知,因此用户知道他们正在通过身份验证。
我目前的想法涉及让用于检查无线当前状态的方法调用状态管理器中的“身份验证”或“断开连接”方法。但是,我不确定这是否是事件处理程序的适当使用——它是否应该设置一个标志或通过某种形式的 IPC 将消息发送到一个单独的线程,该线程将开始身份验证/断开连接过程?
除了能够请求连接/断开连接的事件处理程序之外,用户还可以通过托盘图标执行它。因此,我需要确保这些后台操作不会阻止托盘与用户的交互。
只有一个组件应该能够随时请求更改系统状态,所以我需要使用互斥锁来防止并发状态更改。然而,我应该如何同步这些组件的其余部分对我来说有点神秘。
我应该阅读的任何建议或文献都会受到欢迎。我没有接受过 C# 语言的正式培训,因此如果我有任何错误陈述,我深表歉意。
编辑:最重要的是,我想验证一个事件将作为一个单独的线程执行,因此它不能阻塞主 UI。另外,我想验证如果我有一个事件处理程序订阅了一个事件,它会串行处理事件,而不是并行处理(所以如果用户在处理第一个连接事件之前连接和断开连接,则不会发生两次状态更改同时发生)。