バックグラウンドタスクの実行中に、メインフォームのプログレスバーを更新しようとしています。
最新のPatterns&PracticesリリースルートのEventAggregatorを使用して、アプリケーション全体のイベントをルーティングしています。
私は、BackgroundWorkerイベントをリッスンしているクラスからイベントを発生させており、そのようにイベントを発生させています。
- bwのプロセスは、進行状況を報告するためにBWメソッドを起動します。
- BWは、レポートイベントを発生させます。
- それらは、起動前にBWに設定されたSomeCommandクラスメソッドによって取得されます。
- EventAggregatorからイベントを公開します
public void ProgressChanged(オブジェクト送信者、ProgressChangedEventArgs ea){KnownProgressStatusChangedEvent evt = KernelKeeper.Kernel.Get()。GetEvent(); evt.Publish(ea); }
私のMainPresenterは、これらのイベントを次のようにサブスクライブしています。
KnownProgressStatusChangedEvent progressChanged = EventAggregator.GetEvent<KnownProgressStatusChangedEvent>();
progressChanged.Subscribe(KnownProgressChanged,ThreadOption.UIThread);
ThreadOption.UIThreadを設定しないと、スタックトレースのないProgram.csでTargetInvokationExceptionが発生します。このようにして、例外は発生せず、EventAggregatorにステップインできます。
それがKnownProgressChangedメソッドを呼び出そうとしているとき、それはそれを呼び出そうとし、をチェックしApplication.Current != null
ます。nullであり、何も発生しません。
私は何を間違っているのですか?お知らせ下さい。