Ich habe ein Ausgabefenster erstellt, in dem mehrere Ereignisse mit Prism EventAggregator
abonniert werden. Bisher ist der Konstruktor ist der Umgang mit zwei verschiedenen Veranstaltungen:C# Delegat zweimal angerufen?
public OutputWindowView(IEventAggregator eventAggregator)
{
eventAggregator.GetEvent<LoginStatusEvent>().Subscribe(trackLogin, true);
eventAggregator.GetEvent<ConsoleMessageEvent>().Subscribe(trackMessage, true);
this.InitializeComponent();
}
Beide Veranstaltungen zielen auf die gleiche UI-Komponente über SetText
Methode:
private void trackLogin(LoginStatus s)
{
SetText("Connected: " + s.IsConnected.ToString());
}
private void trackMessage(string s)
{
SetText(s);
}
ich einen Delegierten zu schaffen versuche Thread Fehler zu vermeiden.
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;
}
}
Der Ausgang Hover ist:
===== SetText =====
->CheckAccess > false
===== SetText =====
->CheckAccess > true
Ich würde die Ausgabe erwarten zu sein:
===== SetText =====
->CheckAccess > false
ODER
===== SetText =====
->CheckAccess > true
aber es scheint, zweimal aufgerufen werden.
Danke, können Sie auf Ihren zweiten Punkt über das Abwarten zu einer Eigenschaft erweitern? Ich bin neu in C#. – keeg
Normalerweise haben Sie, besonders im Kontext von prism, eine Ansicht mit einem Ansichtsmodell als Datenkontext, und das Ansichtsmodell implementiert 'INotifyPropertyChanged' (durch Ableiten von' BindableBase' im Prisma) und Sie können Eigenschaften im Ansichtsmodell ändern aus irgendeinem Thread und die Ansicht wird entsprechend aktualisiert. Zu viel für einen Kommentar hier, nehme ich an, Sie google für wpf Datenbindung, mvvm, schauen Sie sich die prism examples Dokumentation an, um die Konzepte kennenzulernen. – Haukinger