Ver Mensaje Individual
  #3 (permalink)  
Antiguo 05/10/2012, 09:33
Avatar de jhodmar
jhodmar
 
Fecha de Ingreso: febrero-2012
Ubicación: Medellin
Mensajes: 52
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: No se controló System.NullReferenceException con Hilos (Subprocesos)

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!