0
我創建了一個輸出窗口,其中多個事件使用Prism的EventAggregator
訂閱。通過SetText
方法C#委託調用兩次?
public OutputWindowView(IEventAggregator eventAggregator)
{
eventAggregator.GetEvent<LoginStatusEvent>().Subscribe(trackLogin, true);
eventAggregator.GetEvent<ConsoleMessageEvent>().Subscribe(trackMessage, true);
this.InitializeComponent();
}
這兩起事件針對同一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
,但它似乎是兩次打電話。
謝謝你,你可以擴展你的第二點關於財產?我是C#的新手。 – keeg
通常,特別是在棱鏡環境中,您將視圖模型視爲數據上下文,並且視圖模型實現了'INotifyPropertyChanged'(通過從棱鏡中的'BindableBase'派生),並且您可以更改視圖模型上的屬性從任何線程和視圖將相應更新。對於這裏的評論太多了,我想,最好的谷歌wpf數據綁定,mvvm,看看棱鏡的例子文檔,以瞭解這些概念。 – Haukinger