【发布时间】: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