none
For e hilos RRS feed

  • Pregunta

  • Saludos,

    Tengo una aplicacion con un formulario main y una pantalla de carga, en esta pantalla de carga se realizan varias validaciones, entre ellas la existencia de un archivo de configuracion, el cual al ser encontrado, es leido y su informacion cargada en variables globales.

    El problema es que este formulario de carga se ejecuta en un hilo aparte, y cuando entra al metodo que lee y carga la informacion a las variables, lo pasa por alto. Siendo que si hago un debugg de la aplicacion paso a paso, entra a este sin problemas. 

    Eh tratado con un Thread.Sleep(), pero aun asi lo pasa por alto. ¿Que podria hacer?

    Gracias.  (A continuacion dejo el fragmento de codigo que pasa por alto.)

    public void leerConfig()
            {
                try
                {
                    //ASIGNO EL ARCHIVO TXT SEGUN LA RUTA OBTENIDA
                    using (StreamReader archivo = new StreamReader(ubiArch, false))
                    {                    
                        string linea;
                        //RECORRO LAS FILAS DEL ARCHIVO OBTENIDOS
                        for (int fila = 1; fila <= 50; fila++)
                        {                        
                            //LEO LA LINEA ACTUAL
                            linea = archivo.ReadLine();
    
                            //DETERMINO DE QUE TRATA EL ENCABEZADO
                            if (linea == "//BASE DE DATOS")
                            {
                                //SERVIDOR DE BASE DE DATOS
                                fila += 1;
                                servidor_bd = archivo.ReadLine();
    
                                //PUERTO DE LA BASE DE DATOS
                                fila += 1;
                                puerto_bd = archivo.ReadLine();
                            }   
                            
                        }
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                    throw;
                }
            }

     
    lunes, 1 de abril de 2019 15:17

Todas las respuestas

  • hola

    >>A continuacion dejo el fragmento de codigo que pasa por alto.

    lo pasa por alto o lo ejecuta en un thread diferente ?

    al ejecutar en un thread (hilo) hara que ese codigo se ejecute sin bloquar el thread de la ventana, es por eso que parece continua, pero en el otro hilo esta procesando el archivo

    lo que no entiendo es porque veo comentarios como ser

    SERVIDOR DE BASE DE DATOS

    PUERTO DE LA BASE DE DATOS

    que informacion has puesto en ese archivo? porque si son datos de configuracion para conectarte a la db, es una pesima idea, para eso existe el archivo de configuracion app.config

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Carlos_Ruiz_M martes, 2 de abril de 2019 16:23
    lunes, 1 de abril de 2019 16:11
  • Es una prueba, en este caso se usa con datos de BD pero tiene otros fines. Pero refiriendome al codigo, si, se ejecuta en otro hilo pero no entra en la instuccion for.. termina demaisado rapido la ejecucion, por eso intente el sleep() pero aun asi no lo hace.
    lunes, 1 de abril de 2019 17:09
  • hola

    >>si, se ejecuta en otro hilo pero no entra en la instuccion for.. termina demaisado rapido la ejecucion,

    que ejecucion termina demasiado rapido ? como valida que no ingresa al for ? en el codigo que nos muestra no hay lineas de debug quizas usando el

    Console.WriteLine()

    para que escriba en la consola del VS

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Carlos_Ruiz_M martes, 2 de abril de 2019 16:23
    lunes, 1 de abril de 2019 18:01
  • Una pregunta: Has dicho que abres un formulario y el formulario llama a leerConfig. ¿No lo estará llamando por casualidad desde el evento Form_Load? Si es así, existe un "bug" conocido por el cual si se produce alguna excepción en el método simplemente la ignora y no hace nada. Revísalo, no vaya a ser que te esté pasando eso. Hay una forma sencilla de comprobar si el problema es ese: quita todo el código del Form_Load y ponlo en un Button_Click (añadiendo provisionalmente para ello un botón al form, luego lo quitas después de hacer la prueba).
    lunes, 1 de abril de 2019 18:55
    Moderador