【问题标题】:updating bindingList on the ui thread using invoke multiple times使用调用多次更新 ui 线程上的 bindingList
【发布时间】:2010-12-30 20:43:58
【问题描述】:

我有一个应用程序,我需要根据从 wcf 服务接收到的消息来更新视图。我正在为 ui 使用 MVP。该视图在 win 表单上有一个 dataGridView,其中显示收到的消息。我的演示者中有此视图的绑定列表。

我通过调用 dataGridView 上的调用来更新绑定列表。我的问题是,如果我收到很多消息(~ 10/秒),将所有这些消息收集在一个单独的列表中,然后在调用调用中,将它们添加到绑定列表或调用调用以添加每条消息是否有意义到绑定列表。

public class Presenter
{
    private List<ClientMessage> newMessages;
    private BindingList<ClientMessage> messageDataSource;
    public void Presenter()
    {
        newMessages = new List<ClientMessage>();
        Views.AuditorGridView.DataSource = messageDataSource;
    }

    public void ReceiveMessages(List<ClientMessage> messageList)
    {
        //...some other message related processing
        foreach (ClientMessage message in messageList)
        {
            if (messageIdList.Contains(message.ID)) continue;
            messageIdList.Add(message.ID);
            messageDataSource.Add(message);
            View.gridView.BeginInvoke(new InvokeDelegate(GridInvokeMethod1));
        }
    }

    private void GridInvokeMethod1()
    {
        Views.AuditorGridView.DataSource = messageDataSource;
    }

    //OR

    public void ReceiveMessages(List<ClientMessage> messageList)
    {
        //...some other message related processing
        newMessages.Clear();
        foreach (ClientMessage message in messageList)
        {
            if (messageIdList.Contains(message.ID)) continue;
            messageIdList.Add(message.ID);
            newMessages.Add(message);
        }
        View.gridView.BeginInvoke(new InvokeDelegate(GridInvokeMethod2));
    }

    private void GridInvokeMethod2()
    {
        foreach (ClientMessage message in newMessages)
        {
            messageDataSource.Add(message);
        }
    }
}

【问题讨论】:

    标签: c# winforms multithreading user-interface gridview


    【解决方案1】:

    您是否尝试过使用 BindingSource。您可以暂停绑定(以便您可以在列表中添加新项目,然后恢复它)。这样,您的 Grid 将获得批量更新。

    您可能必须为此使用 BindingList(以便 Source 上的更新反映在 Target(在您的情况下是 Grid)中)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多