0
プリムのEventAggregator
を使用して複数のイベントを購読する出力ウィンドウを作成しました。これまでのところ、コンストラクタは二つの異なるイベントを処理している:C#デリゲートが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
OR
===== SetText =====
->CheckAccess > true
が、二度呼ばれているようです。
ありがとうございます、あなたは財産への拘束についての2番目の点を拡大できますか?私はC#の初心者です。 – keeg
通常、特にプリズムのコンテキストでは、データコンテキストとしてビューモデルを持つビューがあり、ビューモデルは(プリズムの 'BindableBase'から派生して)' INotifyPropertyChanged'を実装しており、ビューモデルのプロパティを変更できます任意のスレッドからビューが更新されます。ここでコメントするにはあまりにも、私は、wpfのデータバインディング、mvvmのための最高のグーグルは、プリズムの例のドキュメントを見て、概念を知ることができると思います。 – Haukinger