Léelo todo o no te enterarás de la solución... y los psoibles problemas que pueden aparecer...
No es recomendable que añadas código en dicho evento, ten en cuenta que ciertos eventos son asíncronos para ganar en velocidad y no tener 'colgada' la aplicación mientras se rellenan los datos (imagina una base de datos con millones de registros y una consulta de búsqueda compleja, si tarda pongamos un minuto en procesarla no podrías hacer nada más hasta terminar).
Que sea asíncrono implica que no se va a a parar en cada evento a esperar que tu cóodigo sea totalmente resuelto... El resultado final sería pongamos que se vuelcan 1000 filas, se vuelca la fila 1ª notifica al evento de ello, tu código llama a ejecutarse, mientras sale, es leído y el usuario pulsa para cerrar ya se han volcado (pongamos para el ejemplo) 500 filas más.. como es asíncrono, si no recibió de vuelta la señal de un evento y se produce el siguiente caso de lanzar el evento, lo ignora y continúa.
Simplificando, ciertos eventos no son hechos para lo que te dé la gana sino sólo para un procesado simple, por ejemplo si la fila añadida tiene el valor tal poner su celda de color x. Pero no están hechos para hacer código pesado....
Si el caso es que las filas se añaden de forma síncrona, tu código pueda susbsistir (como en el ejemplo añadido), pero repito si es asíncrono, en cuanto no se cierre de vuelta el evento no se disparará el siguiente evento pero la fila si será añadida por lo que tus notificaciones irán falseando los sucesos (inadvertidamente claro).
Esto fue programado así debido a ciertas malas prácticas si se vuelcan 3000 filas en pocos sg. si el usuario ha de pulsar 3000 veces tardará 1 ó 2 horas en responder a la 'genialidad' del programador a la hora de 'ayudar' al usuario. Por eso se añadieron características para añadidos síncronos o asíncronos.
Mi recomendación es que tu código sea tan simple como mostrar un contador de filas... y en el evento del datagridview lo que haces es leer la propiedad rowcount. Opcionalmente activas un timer con un intervalo pequeño que cambie una 'señal' a color rojo y a su vez ese timer dispare otro con intervalo pongamos a 300 msg. que lo vuelva gris al salir de ambos timers en caa uno se desactivan a sí mismos, así cuando se van añadiendo registros al datagridview, aparte de indicarlo en el contador que podría no ser muy visible hay un pequeño parapadeo del 'semáforo', si se añaden muchos registros seguidos el parpadeo será muy contínuo... el semáforo ponlo justo justo debajo de la etiqueta del contador así la atención cae a la vez sobre lo mismo....
Ahora bien lo anterior sólo se aplica cuando el origen es a su vez asíncrono, como una base de datos, si es el usuario quien añade la fila (o como en el ejemplo que te pongo al final) el caso es ditinto. Existen los eventos : RowsAdded y UsersAddedRow recuerda tambien que tienes RowsRemoved y (UserDeleteRow y UserDeletingRow esta para validar si el borrado se efectua o simplemente para copiar la fila antes de eliminarla y pasarla por ejemplo a otro datagridview oculto para acciones de deshacer, etc...)
nota: para conocer los eventos de un objeto, mira en el panel de propiedades del objeto, verás en su cabecera varos iconos: el 1º ordena por categorías el 2º por orden alfabético, pero el 3º y el 4º son selectores para: ver propiedades del objeto o ver eventos... Cuando hagas dobleclcick sobre un evento te lleva a la ventana de código cargando ya la llamada del evento.
nota2: cuando se dispara el evento userAddedRow también se dispara RowsAdded, tenlo en cuenta para no duplicar código y tener 'efectos' indeseados...
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
call Rellenar_DataGridV()
End Sub
Private Sub Rellenar_DataGridView() ' lo rellenamos con datos tomados del foro...
DataGridView1.ColumnCount = 3
DataGridView1.ColumnHeadersVisible = True
Dim miEstiloCabecera As New DataGridViewCellStyle()
miEstiloCabecera.BackColor = Color.Orange
miEstiloCabecera.ForeColor = Color.BlueViolet
miEstiloCabecera.Alignment = DataGridViewContentAlignment.MiddleCenter
miEstiloCabecera.Font = New Font("Arial", 20, FontStyle.Underline + Font.Bold, GraphicsUnit.Pixel)
DataGridView1.ColumnHeadersDefaultCellStyle = miEstiloCabecera
' nota si hemos creado diferentes perfiles de estilo de cabecera se usan desde la siguiente línea
DataGridView1.ColumnHeadersDefaultCellStyle.ApplyStyle(miEstiloCabecera)
DataGridView1.EnableHeadersVisualStyles = True
DataGridView1.Columns(0).Name = "Nombre Usuario"
DataGridView1.Columns(1).Name = "Ubicación"
DataGridView1.Columns(2).Name = "nº Mensajes"
DataGridView1.Columns(3).Name = "Rango"
Dim fila1() As String = {"Iron Man", "Barcelona", "1005", "Administrador"}
Dim fila2() As String = {"Avalon", "Avalon", "447", "Usuario muy activo"}
Dim fila3() As String = {"ibito", "Méjico", "519", "Miembro HIPER activo"}
Dim fila4() As String = {"Robert.29", "Valladolid", "421", "Usuario muy activo"}
Dim fila5() As String = {"Marlon", "?????", "152", "Miembro muy activo"}
Dim fila6() As String = {"r3dsk1", "La tierra de los conocimientos...", "291", "Miembro muy activo"}
Dim fila7() As String = {"Jimbenit", "Colombia", "70", "Miembro activo"}
Dim filas() As Object = {fila1, fila2, fila3, fila4, fila5, fila6, fila7}
Dim Fila As String()
For Each Fila In filas
DataGridView1.Rows.Add(Fila)
Next Fila
End Sub
Private Sub DataGridView1_RowsAdded(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles DataGridView1.RowsAdded
MsgBox("La fila nº: " & DataGridView1.RowCount & " ha sido cargada...")
End Sub
end class