试图理解UI异步调用

本文关键字:异步 调用 UI | 更新日期: 2023-09-27 18:08:33

所以我找到了这篇博文

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个标签显示相同的东西

试图理解UI异步调用

我认为您缺少的是处理程序可以在委托操作中具有逻辑。我会这样做:

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");
    }
});