Как вы заполняете весь DataGridView? Возможно, вам следует попробовать использовать его в виртуальном режиме , что означает, что DataGridView будет запрашивать у вас данные в видимом диапазоне и запрашивать данные только тогда, когда это необходимо.
Вы занимаетесь заполнением основного потока пользовательского интерфейса или фонового потока? Если вы связываете основной поток с работой, ваш пользовательский интерфейс станет вялым.
Я бы предложил вам создать список за кулисами и добавить в него свои данные из фонового потока. Используйте события, связанные с виртуальным режимом (см. это пошаговое руководство ), и предоставьте данные из списка. Когда вы обновляете список, вам необходимо обновить DataGridView (в главном потоке, поскольку DataGridView требует этого).
Я не уверен, сколько пакетов вы видите в секунду, но, возможно, вам следует их буферизовать и обновлять DataGridView только один раз каждые 10 пакетов или раз в секунду (или любое другое число, которое имеет смысл в вашем случае), чтобы сохранить Пользовательский интерфейс отзывчив и не перегружает его обновлением.
private delegate void ParameterlessVoid();
private void RefreshDataGridViewThreadSafe()
{
if (this.dataGridView.InvokeRequired)
{
this.dataGridView.Invoke(new ParameterlessVoid(this.RefreshDataGridView));
}
else
{
this.RefreshDataGridView();
}
}
private void RefreshDataGridView()
{
this.dataGridView.Refresh();
}