optimize actualizaciones a DataTable vinculadas a DataGridView

Tengo un formulario en mi aplicación que muestra algunos datos. Cuando muestro el Formulario por primera vez, cargo algunos datos en una DataTable y luego enlazo la DataTable a un DataGridView. También comienzo un método asincrónico que ejecuta algunas consultas de bases de datos más lentas. Cuando se completan estas consultas lentas, necesito actualizar unos cientos de filas en la tabla de datos, completando los valores devueltos por las consultas más lentas, de esta manera:

foreach (DataRow row in data.Rows)
{
    SlowLoadingData slow_stuff = slow_query_results[(int)row["id"]];

    row.BeginEdit();
    row[column_one] = slow_stuff.One;
    row[column_two] = slow_stuff.Two;
    row[column_three] = slow_stuff.Three;
    row.EndEdit();
}

Esto es extremadamente lento, cuelga el hilo de la interfaz de usuario durante un minuto o más, presumiblemente porque cada fila está desencadenando un nuevo dibujo.

Después de un poco de investigación, encontré una manera de hacerlo rápido. Primero, vincule DataGridView a BindingSource que esté vinculado a DataTable, en lugar de directamente a DataTable. Luego, haga lo siguiente cuando realice cambios en DataTable:

binding_source.SuspendBinding();
binding_source.RaiseListChangedEvents = false;
// foreach (DataRow in Data.Rows) ... code above
binding_source.RaiseListChangedEvents = true;
binding_source.ResumeBinding();
grid.Refresh();

Sin embargo, hay un problema, y es una maravilla: el código anterior evita que DataGridView detecte nuevas filas agregadas a la DataTable. @ Las filas nuevas agregadas a la tabla no aparecen en la cuadrícula. La cuadrícula también puede generar excepciones si usa las teclas de flecha para mover la selección de celda actual del extremo inferior de la cuadrícula, porque la fuente de datos subyacente tiene más filas pero la cuadrícula no ha creado filas de cuadrícula para mostrarlas.

Entonces, dos posibles soluciones que puedo ver:

Existe una mejor manera de suprimir las actualizaciones vinculantes mientras se realizan cambios en la tabla de datos subyacente?

¿Hay una manera fácil de decirle a DataGridView que actualice correctamente su colección de filas de cuadrícula para que coincida con el número de filas de DataTable subyacentes? (Nota: He intentado llamar a BindingSource.ResetBindings, pero parece desencadenar más excepciones si tieneremot filas de la DataTable!)

Respuestas a la pregunta(7)

Su respuesta a la pregunta