Inicialmente el problema con linea exacta no se especificamente donde se produce, por eso pase todo el codigo.
pero bueno gracias amigo y si, tenes razón he optado por crear delegados...(jamas los habia necesitado) y así no me salta la excepción.
algo como esto
Declaro mi hilo donde quiero que se inicie:
Código:
Dim t As New Thread(AddressOf enOtroHilo)''llamando
t.Start()
aqui se ejecuta la instruccion:
Código:
Private Sub enOtroHilo()
Dim rnd As New Random()
Dim TableHilos As New DataTable
For i As Integer = 0 To 3
TableHilos.Columns.Add("columna" + CStr(i))
Next
Dim filas As Integer = rnd.Next(100000, 4000000)
Me.ProgressBar2.Maximum = filas
For i As Integer = 1 To filas
TableHilos.Rows.Add("Fila", i, "Ejemplo", ".... ")
Me.ProgressBar2.Increment(1)
Next
''mandamos nuestro valor
SetText(TableHilos)
End Sub
y por ultimo el delegado:
Código:
Private Delegate Sub DelegadoData(ByVal DSHilo As DataTable)
Private Sub SetText(ByVal DSHilo As DataTable)
'la propiedad InvokeRequired es verdadero, si es así,
'quiere decir que el hilo en el que está actualmente esa llamada es diferente al hilo en el que se creó el control,
'por tanto, creamos un nuevo objeto del tipo del delegado, le indicamos que método debe usar
'y a continuación llamamos al método Invoke de nuestro formulario, cuando se entre nuevamente en ese método
'(porque el formulario lo "invoca") el valor que devolverá la propiedad InvokeRequired será False,
'ya que el hilo en el que está es el mismo en el que se creó el control, ya que es el mismo hilo usado por el formulario
If DataGridView3.InvokeRequired Then
Dim d As New DelegadoData(AddressOf SetText)
Me.Invoke(d, New Object() {DSHilo})
Else
Me.DataGridView3.DataSource = DSHilo
End If
End Sub
como ven al datagrid le mando el datatabe al final de todo
mi habilidad en programacion aumento en +1
GRACIAS!