none
AyudenMEE!!! con BackgroundWorker RRS feed

  • Pregunta

  • Diganme por favor en que estoy fallando, o corrijan mi código.

    -Objetivo: Hacer que no se cuelgue y no consuma recursos la aplicacion mientras intenta hacer una conexion a SQL. (porque hasta donde se para eso sirve el Backgroundworker)

    -ERROR: cuando lo ejecuto carga la barra pero no hace que se cumple si hay un error, claro que si pongo los datos correctos en el connectionstring este si corre.

    Bien aqui les va lo que tengo armado:

    -FORM 1 (que lo voy a usar como mi SPLASH SCREEN)
    -FORM 2 (que sera como mi Formulario Principal)

    FORM1 Controles que Tenemos:

    +  BackgroundWorker1
    +  Label1
    + ProgressBar1

    Y esto es lo que tengo Programado:

    Imports System.Data.SqlClient
    
    Public Class Form1
        Dim MiConexion As New SqlConnection
    
        Sub Conectar()
            Try
                MiConexion.ConnectionString = "Data Source=; Initial Catalog=; Integrated security=true"
    
                BackgroundWorker1.ReportProgress(MiConexion.PacketSize)
                MiConexion.Open()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    
        Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
            Conectar()
        End Sub
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            BackgroundWorker1.RunWorkerAsync()
        End Sub
    
        Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
            ProgressBar1.Value = e.ProgressPercentage
        End Sub
    
        Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
            If MiConexion.State = ConnectionState.Closed Then
                MessageBox.Show("No conecto, revise su configuración")
                My.Forms.Form2.ShowDialog()
            End If
        End Sub

    Gracias :)


    Jimmy Lopez | LIMA-PERU

    miércoles, 20 de junio de 2012 17:06

Todas las respuestas

  • pero que objetivo tiene lanzar un thread solo para conectarse a la db

    cuando lo ejecuto carga la barra pero no hace que se cumple si hay un error

    que se cumple que cosa ? ahi algo no se entendio

    ademas que progreso quieres mostrar si solo es conectarse a la db

    lo maximo que puede hacer es poner el progress con estilo marquee para que muestre trabajo pero avance real de la tarea no puede mostrarlo nucna porque no recibes un feedback de la db para ver cuanto tarda

    usar el ProgressChanged no sirve en este caso

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 20 de junio de 2012 17:25
  • Bueno es que estoy haciendo un pequeño programa... y queria hacerlo mas profesional :) ... Bueno lo que pasa es q lo estaba haciendo con unas opciones para que seleccione un servidor y demas... Y cuando lo ejecuto por primera vez siempre tiende a demorar... entonces queria que se muestre la carga de cuanto se esta demorando en conectarse... que se vea un porcentaje en cuanto va el intento de conexion... de no poder conectarse (porque, digamos que el usuario no configuro bien la aplicacion con el servidor de BD) entonces que se muestre un mensaje... es a donde quiero llegar... 

    Jimmy Lopez | LIMA-PERU

    miércoles, 20 de junio de 2012 17:31
  • entonces que se muestre un mensaje... es a donde quiero llegar...

    el tema es que si algo falla no denberias mostrar el mesnaje desde el thread, sino devolver al RunWorkerCompleted un mensaje de error y alli si mostrarlo

    el unico evento seguro fuera del thread donde deberias hacer esto es en el RunWorkerCompleted, desde el Dowork deberia pasar ese mensaje y dar por terminado el thread


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 20 de junio de 2012 17:36
  • Entiendo que debo formular la pregunta RunWorkerCompleted?? si es asi es lo que he hecho... Bueno yo lo queria hacer con el backgroundworker... pero en fin.. si hay alguna otra manera de hacer un splash screen y que este sirva para hacer la conexion y mostrar su porcentaje como seria?.

    Jimmy Lopez | LIMA-PERU

    miércoles, 20 de junio de 2012 18:00
  • es que esta bien como lo haces, solo que debes alterar y cambiar algunso conceptos

    - no muestras el avance real sino que se esta trabajndo cambiando el progress al estilo marquee, y ya no usas el evento ProgressChanged

    - ademas si hay un error devuelves este como resultado de la respuesta, al RunWorkerCompleted y es alli donde muestras el mesnaje, no en el DoWork

    cambiando esto puede implementarlo


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 20 de junio de 2012 18:13