Prism の を使用して、複数のイベントがサブスクライブされる出力ウィンドウを作成しましたEventAggregator
。これまでのところ、コンストラクターは 2 つの異なるイベントを処理しています。
public OutputWindowView(IEventAggregator eventAggregator)
{
eventAggregator.GetEvent<LoginStatusEvent>().Subscribe(trackLogin, true);
eventAggregator.GetEvent<ConsoleMessageEvent>().Subscribe(trackMessage, true);
this.InitializeComponent();
}
SetText
どちらのイベントも、メソッドを介して同じ UI コンポーネントをターゲットにしています。
private void trackLogin(LoginStatus s)
{
SetText("Connected: " + s.IsConnected.ToString());
}
private void trackMessage(string s)
{
SetText(s);
}
スレッド エラーを回避するためにデリゲートを作成しようとしています。
private delegate void SetOutputText(string content);
private void SetText(string content)
{
Trace.WriteLine("===== SetText =====");
var text = content + Environment.NewLine;
if (this.txtOutput.Dispatcher.CheckAccess() == false)
{
Trace.WriteLine("->CheckAccess > false");
SetOutputText _output = new SetOutputText(SetText);
this.Dispatcher.Invoke(_output, text);
}
else
{
Trace.WriteLine("->CheckAccess > true");
this.txtOutput.Text += text;
}
}
出力ホバーは次のとおりです。
===== SetText =====
->CheckAccess > false
===== SetText =====
->CheckAccess > true
出力は次のようになると思います。
===== SetText =====
->CheckAccess > false
また
===== SetText =====
->CheckAccess > true
しかし、2回呼び出されているようです。