Ver Mensaje Individual
  #3 (permalink)  
Antiguo 26/10/2006, 23:09
Avatar de SuperPinwi
SuperPinwi
 
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 8 meses
Puntos: 1
Gracias por el interés, a ver si me puedes ayudar!!

El código de lo q tiene q ver con el hilo es este:

Código:
'
    'Llama al evento asociado a un clic sobre el botón iniciar del 
    'formulario
    Private Sub BIniciar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BIniciar.Click
        comandoIniciar()
    End Sub
    '
    'Llama al evento asociado a un clic sobre el botón parar del 
    'formulario
    Private Sub BParar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BParar.Click
        banderaLeer = True
    End Sub
'
'Evento asociado a la selección del submenú Leer BD del menú Archivo
    'descripción: inicia el hilo que lee información de la base de datos
    'y la muestra en el formulario principal
    Public Sub comandoIniciar()
        banderaLeer = False
        ThreadLeerBD = New System.Threading.Thread(AddressOf Me.EjecutaHiloBD)
        ThreadLeerBD.start()
        ThreadLeerBD.IsBackground()
        actualizaLeerBD(ThreadLeerBD)
        compruebaHiloLeerActivo(ThreadLeerBD)
    End Sub
    '
    'Método actualizaLeerBD
    'descripción: se encarga de dejar de leer en el caso de que se haya
    'pulsado el botón parar
    Public Sub actualizaLeerBD(ByVal ThreadLeerBD As System.Threading.Thread)
        System.Windows.Forms.Application.DoEvents()
        If ThreadLeerBD.ThreadState.Running = True Then
            ThreadLeerBD.Start()
            ThreadLeerBD.IsBackground = True
        ElseIf ThreadLeerBD.ThreadState.Unstarted = True Or ThreadLeerBD.ThreadState.Stopped = True Then
            ThreadLeerBD = New System.Threading.Thread(AddressOf Me.EjecutaHiloBD)
            ThreadLeerBD.Start()
            ThreadLeerBD.IsBackground = True
        End If
    End Sub
    '
    'Método compruebaHiloLeerActivo
    'descripción: se encarga de comprobar si el hilo leer está activo, y en
    'caso de que no lo esté, volver a iniciarlo tras una pausa de 1 segundo.
    '
    Public Sub compruebaHiloLeerActivo(ByVal ThreadLeerBD As System.Threading.Thread)
        While banderaLeer = False
            System.Windows.Forms.Application.DoEvents()
            'ThreadLeerBD.Sleep(500)
            actualizaLeerBD(ThreadLeerBD)
        End While
    End Sub
    '
'HILO LEE BASE DE DATOS
    'descripción: se encarga de leer una base de datos y mostrar por 
    'pantalla en la interfaz principal los valores que de ella obtiene.
    Public Shared Sub EjecutaHiloBD()

        Dim objAcciones As New OleDbCommand
        'Define una transacción, para evitar conflictos de concurrencia
        Dim transaccion As OleDbTransaction
        Dim dt As DataTable
        Dim objAdapter
        'Dim OleDbUpdateCommand As OleDbCommand = New OleDbCommand
        'Variable de bucle
        Dim i As Integer
        'Para manejar las filas de la base de datos
        Dim fila As Integer
        'Para conocer el número de filas
        Dim n As Integer
        'Cadenas temporales para las variables de la base de datos
        Dim sDescripcion As String
        Dim sValor As String
        Dim sVisibilidad As String
        Dim sID As String
        'Crea un array de etiquetas para manejar los datos que en ellas se muestran más cómodamente
        Dim etiquetas(10) As Label
        etiquetas(0) = Label1
        etiquetas(1) = Label2
        etiquetas(2) = Label3
        etiquetas(3) = Label4
        etiquetas(4) = Label5
        etiquetas(5) = Label6
        etiquetas(6) = Label7
        etiquetas(7) = Label8
        etiquetas(8) = Label9
        etiquetas(9) = Label10
        'Array que contiene los textfields del formulario
        Dim camposTexto(10) As TextBox
        camposTexto(0) = TextBox1
        camposTexto(1) = TextBox2
        camposTexto(2) = TextBox3
        camposTexto(3) = TextBox4
        camposTexto(4) = TextBox5
        camposTexto(5) = TextBox6
        camposTexto(6) = TextBox7
        camposTexto(7) = TextBox8
        camposTexto(8) = TextBox9
        camposTexto(9) = TextBox10
        'Array que contiene un campo booleano con la visibilidad de un campo
        Dim visibilidad(10) As Boolean

        Try
            'Se abre la conexión de la base de datos
            objConn.Open()
            'Se escogen los registros de la base de datos que se desean
            objAdapter = New OleDbDataAdapter("SELECT * FROM Propiedades ORDER BY ID", objConn)
            'Inicio de la transacción
            transaccion = objConn.BeginTransaction() 'IsolationLevel.ReadCommitted)
            objAcciones.Transaction = transaccion
            objAcciones.Connection = objConn
            objAdapter.selectcommand.transaction = transaccion
            'Se almacena la base de datos en el dataTable
            dt = New DataTable
            objAdapter.Fill(dt)
            'Se almacena en n el número de filas de la base de datos
            n = dt.Rows.Count
            'Se asocia la conexión con el objeto acciones
            objAcciones.Connection = objConn
            If n = 0 Then
                MessageBox.Show("No se ha encontrado ningún registro que coincida con la selección")
            Else
                'Recorre las filas en el dataTable y las va asignando a las etiquetas
                'del formulario principal para que se muestren
                For fila = 0 To n - 1
                    'Asignar a las variables el contenido del registro
                    sDescripcion = dt.Rows(fila)("descripcion").ToString
                    sValor = dt.Rows(fila)("valor").ToString
                        etiquetas(fila).Text = sDescripcion
                        camposTexto(fila).Text = sValor
                Next
                'Finalización exitosa de la transacción
                transaccion.Commit()
            End If
        Catch ex As Exception
            'En el caso de que haya algún error, deshace los cambios y
            'muestra un aviso con información sobre el problema
            transaccion.Rollback()
            MessageBox.Show(Err.Description, "Información del sistema")
        Finally
            'Cierra la conexión de la base de datos
            objConn.Close()
        End Try
    End Sub
y algo q haría q se pare, sería la selección de cualquier menú Item como por ejemplo:

Código:
 Private Sub MICbd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MICbd.Click
        Try
            Dim dlgFile = New OpenFileDialog
            dlgFile.Filter = "Base de datos (*.mdb) | *.mdb"
            dlgFile.Title = "Selecciona la base de datos"
            'Si el diálogo devuelve OK
            If dlgFile.ShowDialog() = DialogResult.OK Then
                'Nombre del archivo elegido, con su ruta completa,
                'equivale a la base de datos
                ruta = dlgFile.FileName
            End If
        Catch ex As Exception
            MessageBox.Show("La base de datos no ha sido seleccionada correctamente", "Aviso")
        End Try
    End Sub

Última edición por SuperPinwi; 26/10/2006 a las 23:14