我创建了一个输出窗口,其中使用 Prism 订阅了多个事件EventAggregator
。到目前为止,构造函数正在处理两个不同的事件:
public OutputWindowView(IEventAggregator eventAggregator)
{
eventAggregator.GetEvent<LoginStatusEvent>().Subscribe(trackLogin, true);
eventAggregator.GetEvent<ConsoleMessageEvent>().Subscribe(trackMessage, true);
this.InitializeComponent();
}
两个事件都通过以下方法针对同一个 UI 组件SetText
:
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
但它似乎被调用了两次。