• Viernes 26 de Abril de 2024, 06:33

Autor Tema:  Problema Con Hilos  (Leído 985 veces)

fcampanero

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problema Con Hilos
« en: Miércoles 25 de Julio de 2007, 09:44 »
0
Buenos días

A ver si alguien me puede echar una mano. Estoy un poco perdido, es el primer programa que hago en C# y me está costando un poquillo.
Me he echo un programa para recuperar las posiciones del GPS de una PDA.

He echo un formulario que tiene dos simples botones y un textBox.
Un boton para conectar y otro para salir.
El botón conectar enlaza con una clase (public class ConectarGPS) que tiene un metodo (conectaGPS()) y lo que hace este método es sacarme todas las trazas del GPS a un fichero plano.

En el formulario he realizado un boton conectar, que hace lo siguiente
try
{
       hilo = new Thread(new ThreadStart(conectarGPS.conectaGPS));
}

Directamente no entra en el conectaGPS, no se que pasa,

¿por que puede ser esto?,
El formulario tiene lo siguiente:
namespace ConectarGPS
{
    public partial class Formulario : System.Windows.Forms.Form
    {
        private Thread hilo;
        private System.IO.Ports.SerialPort puertoGPS = new
                     System.IO.Ports.SerialPort("COM3");
        private ConectarGPS conectarGPS;
        public Formulario()
        {
            InitializeComponent();
        }

        private void Formulario_Load(object sender, EventArgs e) {}

        public void Conectar_Click(object sender, EventArgs e)
        {
            this.comentarios.Text = "  .....Antes de Entrar.....   ";
            System.Threading.Thread.Sleep(3000);
            puertoGPS.Open();
            this.comentarios.Text = "  .....He abierto el puerto.....   ";
            System.Threading.Thread.Sleep(3000);
            try
            {
                hilo = new Thread(new ThreadStart(conectarGPS.conectaGPS));
            }
            catch (Exception)
            {
                this.comentarios.Text = "Sale por la excepcion   ";
                System.Threading.Thread.Sleep(2000);
            }

            hilo.Start();
        }
        private void comentarios_TextChanged(object sender, EventArgs e) {}

        private void salir_Click(object sender, EventArgs e)
        {
            if (puertoGPS.IsOpen)
            {
                puertoGPS.Close();              
            }
            Application.Exit();
        }
}

conectaGPS tiene lo siguiente:

namespace ConectarGPS
{
    public class ConectarGPS
    {
        static void Main()
        {
            Application.Run(new Formulario());
        }

        public void conectaGPS()
        {
            ... Aqui hago todo el desarrollo de conexion, y bajada de fichero
         }
   }

mx_latino

  • Miembro activo
  • **
  • Mensajes: 91
  • Nacionalidad: ec
    • Ver Perfil
Re: Problema Con Hilos
« Respuesta #1 en: Viernes 27 de Julio de 2007, 17:19 »
0
Eso de manejar hilos desde un inicio es medio complejo porq para empezar no trabajas con un control de usuario llamado "BackgroundWorker" solo agregalo a tu aplicacion y es muy facil de usarlo..

mira el siguiente ejemplo esta aplicado a un servicio Web pero por alli va la cosa

Código: Text
  1.  
  2.  
  3. En el Load del formulario disparo el inicio del proceso y este llama al evento
  4. //DoWork del control backgroundWorker1
  5.  
  6. /*********************************************
  7. private void Form1_Load(object sender, EventArgs e)
  8.        {
  9.            this.backgroundWorker1.RunWorkerAsync();
  10.        }
  11. /*********************************************
  12.  
  13. //Este evento nos sirve para se dispara al iniciar el proceso asincrono
  14. private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  15.        {
  16.  
  17. // Aqui invocamos al Web Service o cualquier cosa que queramos hacer
  18.            localhost.Service lh= new localhost.Service();
  19.  
  20. //Decimos que el resultado de esto que para nuestro caso va a ser el Dataset que
  21. //nos devuelve el Servicio Web sera el retorno de nuestra operacion
  22.            e.Result = lh.SacarDatos();
  23.  
  24. //Si queremos provocamos el Evento ProgressChanged del
  25. //control backgroundWorker que nos servira a su vez para cambiar o
  26. //actualizar los valores del pogressBar
  27.  
  28.            //Activar siguiente linea si se desea disparar evento ProgressChanged
  29.           // backgroundWorker1.ReportProgress(X_valorPorcentual);
  30.         }
  31.  
  32.  
  33. /*********************************************
  34.  
  35. //Este metodo se dispara cuando se finaliza el proceso asincrono
  36. private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  37.        {
  38.  
  39.  //Cargamos en una variable tipo Dataset el resultado
  40.            DataSet ds = (DataSet)e.Result;
  41.  
  42. //El Dataset asignamos al dataGridView
  43.            this.dataGridView1.DataSource = ds.Tables[0].DefaultView;
  44.  
  45. // La siguiente linea  pone a progressBar1 como completado
  46.         //this.progressBar1.Value = this.progressBar1.Maximum;
  47.        }
  48.  
  49.  
  50. /*********************************************
  51.  
  52. //Este evento se dispara solo si en el Evento DoWork se habilito
  53. //la linea " backgroundWorker1.ReportProgress(X_valorPorcentual); "
  54.  
  55.  
  56.        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
  57.        {
  58.  
  59.            //progressBar1.Value = e.ProgressPercentage;
  60.        }
  61.  
  62. /*********************************************
  63.  
  64.