none
crear hilo secundario en metodo Main RRS feed

  • Pregunta

  • buenas tardes a todos. Bueno, les comento. En mi aplicación de escritorio, agregue toda la configuración necesaria para que esta fuera ClickOnce, es decir, que se actualice automáticamente en caso de haber una nueva versión. Hasta ahí todo bien. El tema es que quiero solucionar un problema al momento de actualizar. Cuando doy click en actualizar, la aplicación se cierra y no hay nada indicando que está actualizando. Esto es confuso para el usuario final ya que me comentó que al no aparecer nada, no sabe si la aplicación se actualizó o se colgó...muestro un mensaje al finalizar diciendo que la aplicación se ha actualizado, pero la actualización aveces, ha llevado un tiempo más extenso de lo esperado...entonces lo que quiero es abrir un fomulario con un mensaje mientras la actualización se lleva a cabo en un hilo diferente, todo esto en el Método Main.... acá mi código

    private static void Main()
            {
                if (ApplicationDeployment.IsNetworkDeployed)
                {
                    if (ApplicationDeployment.CurrentDeployment.CheckForUpdate())
                    {
                        DialogResult message = MessageBox.Show("Se ha encontrado una nueva versión de la aplicación. ¿Le gustaría actualizar ahora?", "NUEVA ACTUALIZACIÓN", 
                            MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
                        if (message == DialogResult.Yes)
                        {
                            frmAvisoActualizacion ma = new frmAvisoActualizacion();
                            ThreadStart delegado = new ThreadStart(abrirVentana(ma));//ERROR 1
                            Thread hilo = new Thread(delegado);
                            hilo.Start();
    
                            //MessageBox.Show("Tenga en cuenta que la actualización puede durar unos minutos. No apague ni reinicie el sistema hasta que la instalación haya terminado.".ToUpper(),
                            //    "AVISO DE ACTUALIZACIÓN", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                            ApplicationDeployment.CurrentDeployment.Update();
                            var version = ApplicationDeployment.CurrentDeployment.UpdatedVersion;
                            MessageBox.Show("Actualización descargada e instalada. La nueva versión es " + version + "", "REINICIAR APLICACIÓN", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                            Application.Restart();
                        }
                        else
                        {
                            Application.EnableVisualStyles();
                            Application.SetCompatibleTextRenderingDefault(false);
                            Application.Run(new frmInicio());
                        }
                    }
                    else
                    {
                        Application.EnableVisualStyles();
                        Application.SetCompatibleTextRenderingDefault(false);
                        Application.Run(new frmInicio());
                    }
                }
            }
    
            public void abrirVentana(object ma)//ERROR 2
            {
                Form f = ma as Form;
                f.Show();
            }

    el problema es que me da dos errores, acá el detalle.

    ERROR 1

    ERROR 2

    Cómo puedo solucionar esto???? cómo puedo crear y abrir un hilo diferente en Main para poder lanzar una ventana temporal????

    espero me puedan ayudar., Muchas gracias a todos.

    Saludos

    lunes, 9 de abril de 2018 21:19

Respuestas

  • El problema que usted muestra es que crea mal el ParameterizedThreadStart.  Es new ParameterizedThreadStart(abrirVentana).  Así, sin el argumento.  El argumento se provee cuando se llama a Start.  hilo.Start(ma).

    Pero eso no tiene importancia porque tampoco le va a funcionar.  El ejecutable se detiene porque la actualización necesita sobreescribir el archivo .exe.  El hilo estará en ese .exe.  Entonces si el hilo se ejecuta, la actualización falla porque el archivo .exe está en uso.

    Necesita otro .exe completamente aparte y llamarlo por línea de comando, o sea, usandro Process.Start().


    Jose R. MCP
    Code Samples

    • Marcado como respuesta Enrique Aleman jueves, 12 de abril de 2018 15:20
    martes, 10 de abril de 2018 23:37
    Moderador

Todas las respuestas

  • El problema que usted muestra es que crea mal el ParameterizedThreadStart.  Es new ParameterizedThreadStart(abrirVentana).  Así, sin el argumento.  El argumento se provee cuando se llama a Start.  hilo.Start(ma).

    Pero eso no tiene importancia porque tampoco le va a funcionar.  El ejecutable se detiene porque la actualización necesita sobreescribir el archivo .exe.  El hilo estará en ese .exe.  Entonces si el hilo se ejecuta, la actualización falla porque el archivo .exe está en uso.

    Necesita otro .exe completamente aparte y llamarlo por línea de comando, o sea, usandro Process.Start().


    Jose R. MCP
    Code Samples

    • Marcado como respuesta Enrique Aleman jueves, 12 de abril de 2018 15:20
    martes, 10 de abril de 2018 23:37
    Moderador
  • Estimado, hola, muchas gracias por su respuesta. Me ha servido para guiarme y resolver el problema. Saludos

    jueves, 12 de abril de 2018 15:20