私は現在、ユーザーが特定のワイヤレスネットワークに接続するときに、特定のネットワークリソースに対してユーザーを自動的に認証するC#アプリケーションを構築しています。
現在、私はManaged Wifi APIを使用して、ユーザーがワイヤレスネットワークに接続/切断するタイミングを検出しています。私はイベントハンドラーを持っているので、これらのアクティビティのいずれかが発生すると、ワイヤレス接続の現在の状態を検査するために私のメソッドの1つが呼び出されます。
アプリケーションの状態を管理するために、アプリケーションの状態を変更するために必要な操作を実行する「コンダクター」と呼ばれる別のクラスがあります。たとえば、ワイヤレスカードが正しいネットワークに接続する場合、コンダクタはシステム状態を「監視」から「認証」に変更する必要があります。認証が成功した場合、コンダクターは状態を「接続済み」に変更する必要があります。切断すると再び「監視」状態になり、認証エラーにより「エラー」状態になります。これらの状態の変化(ユーザーが要求した場合)はTrayIcon通知をもたらす可能性があるため、ユーザーはそれらが認証されていることを認識します。
私の現在のアイデアは、ワイヤレスの現在の状態を検査するために使用されるメソッドを使用して、状態マネージャー内の「認証」または「切断」メソッドを呼び出すことを含みます。ただし、これがイベントハンドラーの適切な使用法であるかどうかはわかりません。代わりに、フラグを設定するか、何らかの形式のIPCを介して別のスレッドにメッセージを送信して認証/切断プロセスを開始する必要がありますか?
イベントハンドラーが接続/切断を要求できることに加えて、ユーザーはトレイアイコンを介してそれを実行することもできます。結果として、これらのバックグラウンド操作がトレイのユーザーとの対話をブロックしていないことを確認する必要があります。
いつでも1つのコンポーネントのみがシステム状態の変更を要求できるはずなので、同時状態変更を防ぐためにミューテックスを使用する必要があります。ただし、これらの残りのコンポーネントをどのように同期する必要があるかは、私には少し謎です。
私が読むべきアドバイスや文献はすべて適用されます。私はC#言語の正式なトレーニングを受けていないので、何かを間違えた場合はお詫び申し上げます。
編集:最も重要なのは、イベントが別のスレッドとして実行されることを確認したいので、メインUIをブロックできないことです。さらに、イベントハンドラーがイベントにサブスクライブしている場合、イベントを並列ではなくシリアルに処理することを確認したいと思います(したがって、最初の接続イベントが処理される前にユーザーが接続および切断した場合、2つの状態変化は発生しません同時に発生します)。