试图理解UI异步调用

时间:2014-06-12 16:08:06

标签: c# user-interface

所以我找到了这篇博文

http://lostechies.com/gabrielschenker/2009/01/23/synchronizing-calls-to-the-ui-in-a-multi-threaded-application/

我早上都在努力学习它。 它使用“股票报价”更新单个标签。

MessageBus.Register<QuoteMessage>(m => label1.Text = m.Symbol+":"+m.Quote.ToString("n2"));

我想用一个消息处理程序更新多个标签。具体来说,我可能想要根据QuoteMessage对象中的内容更改不同的标签。鉴于下面的代码,我只能使用每个标签的处理程序更新标签。

MessageBus.Register<QuoteMessage>(m => label1.Text = m.Symbol+":"+m.Quote.ToString("n2"));
MessageBus.Register<QuoteMessage>(m => label2.Text = m.Symbol + ":" + m.Quote.ToString("n2"));
MessageBus.Register<QuoteMessage>(m => label3.Text = m.Symbol + ":" + m.Quote.ToString("n2"));
MessageBus.Register<QuoteMessage>(m => label4.Text = m.Symbol + ":" + m.Quote.ToString("n2"));

只给我4个标签显示相同的东西。

1 个答案:

答案 0 :(得分:1)

我认为你缺少的是处理程序在委托动作中可以有逻辑。我会做这样的事情:

MessageBus.Register<QuoteMessage>(m => {
    if (m.Symbol == "MSFT") {
        label1.Text =  m.Symbol+":"+m.Quote.ToString("n2");
        label2.Text =  m.Symbol+":"+m.Quote.ToString("n2");
    }
    else if (something) {
        // Do something else
        label3.Text =  m.Symbol+":"+m.Quote.ToString("n2");
    }
});