私はwcfサービスから受信したメッセージに基づいてビューを更新する必要があるアプリケーションがあります。 MVPを使用しています。ビューには、受信したメッセージを表示するwinフォームのdataGridViewがあります。私はプレゼンターのこのビューのバインディングリストを持っています。複数の呼び出しを使用してuiスレッドのbindingListを更新する
私はdataGridViewの呼び出しを呼び出してバインディングリストを更新します。私の質問は、私は別のリスト内のすべてのメッセージを収集し、その後、呼び出し呼び出しの中でそれらをバインディングリストに追加するか、各メッセージを追加するための呼び出しを呼び出すのが大好きです(〜10/sec)バインディングリストに追加します。
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);
}
}
}