3

UI全体を設計するアプリケーションコンテキストを拡張するtaskBarIcon要素があります。これは、アプリケーションの本来の機能がバックグラウンドプロセスを実行し、アプリが実行されていることの確認としてアイコンを提供することであったためです。ただし、アイコンを右クリックしてアクセスできるメニューの形式で機能を追加しています。コア機能は1つのスレッドで実行されており、メインスレッドのアイコンであるため、アイコンへのアクセスに問題があります。通知バブルを表示する必要があるという単純なケースでは。2つのスレッドが同じメモリにアクセスしている可能性のあるポイントは他にないため、同期は実際には問題になりません。

私はJavaに慣れていますが、このプロセスははるかに簡単です。C#が必要とするInvoke-Delegateダンスに関して見つけた記事を読みましたが、アプリケーションコンテキストを拡張するオブジェクトに固有のものはありません。私の現在の実装は、本番環境で安全にするにはあまりにも予測不可能です。

私の質問はこれです:メニューのアクセシビリティを妨げることなく、通知バブルを表示するために他のプロセスにメッセージを送信するにはどうすればよいですか?具体的には、Application Contextを拡張するUIクラスと、invokeメソッドを呼び出す別のスレッドのクラスを使用した簡単な例が非常に役立ちます。

私は本当に助けに感謝します!

badPanda

4

1 に答える 1

1

通知バブルを作成したのと同じスレッドで、SynchronizationContext割り当てたオブジェクトを使用することもできます。次に、メニューが表示されているコンポーネントにオブジェクトをSynchronizationContext.Current渡し、メッセージの送信に使用します。または、通知バブルコンポーネントまたはそのフォームにアクセスできる場合は、次のことができます。SynchronizationContextcontext.Send(....)form.Invoke((MethodInvoker)delegate {....});

于 2010-06-23T18:02:58.027 に答える