• Domingo 22 de Diciembre de 2024, 19:02

Autor Tema:  Pregunta Sencilla De .dispose()  (Leído 1553 veces)

amnesia_ac

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Pregunta Sencilla De .dispose()
« en: Sábado 17 de Junio de 2006, 05:26 »
0
hola tengo una pregunta, soy algo nuevo y no se como funciona el C#. Tengo una forma, creo otra mediante "new form" y luego hago un .Dispose(false) de la primera forma.
Pero al cerrar la segunda forma, no se finalizan todos los componentes del programa. Solo pareciera como que oculta la forma, pero el programa sigue corriendo.
¿Qué debo hacer para finalizar el programa? ¿Debo pasar algo a la segunda forma?
Gracias a todos!

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Pregunta Sencilla De .dispose()
« Respuesta #1 en: Sábado 17 de Junio de 2006, 21:28 »
0
Con dispose no pasara nada porque las formas no tienen ningun manejo de datos unsafe.

La forma siempre se va a esconder salvo que ya haya finalizado el escope para el cual fue definida, asi que permanece oculta.

No se muy bien que es lo que quieres hacer, pero intuyo que al cerrar una forma quieres que se cierren las dos, mejor coloca el codigo que usas para poderte dar un mejor consejo.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

amnesia_ac

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Pregunta Sencilla De .dispose()
« Respuesta #2 en: Domingo 18 de Junio de 2006, 07:00 »
0
Gracias por responder Juan...
Realmente no tengo el código y mas explicitamente, lo que quiero hacer es lo siguiente.
La primera forma es un Splash screen, que luego de unos segundos, se ocultará mediante un dispose(false) y se mostrará la pantalla principal. De ahí si tengo código, es el sig:

   tmrInicio.Enabled = false;
   frmSocio forma = new frmSocio();
   forma.Show();
   this.Dispose(false);

Luego entonces, se muestra la segunda forma, la de socios, y al cerrar esta, debería terminar el programa. Lo que sería un "End" en VB, pero no es el caso, en el evento dispose de la frmSocio, esta el sig código:
       
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

Sin embargo, components es null, por lo cual no entra a la validación, y sólo hace un dispose de "base" pero el programa sigue corriendo, porque creo que los componentes de la primera forma no han sido liberados, ya que el dispose se hizo con False. En fin, ese es el problema, justo ahora acabo de reflexionar en que ese es justamente el problema, así que luego de postear esto, veré entonces como solucionarlo, igual y encuentro la solución je je...

Saludos!

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Pregunta Sencilla De .dispose()
« Respuesta #3 en: Domingo 18 de Junio de 2006, 17:10 »
0
Sigo sin entenderte... pero vamosnos por la facil, para solucionarlo usa algo asi en el main de la aplicacion.

Código: Text
  1.  
  2. using(FrmCubo frmc = new FrmCubo())
  3.   {
  4.     frmc.Show();
  5.     frmc.InicializarGraficos();
  6.     Application.Run(frmc);
  7.   }
  8.  
Con esto lo que haces es delimitar el scope donde  debe existir la forma vigente, es decir una vez sales del scope el GC es notificado que esa seccion de memoria ya puede ser colectada.

Prueba y me cuentas.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

amnesia_ac

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Pregunta Sencilla De .dispose()
« Respuesta #4 en: Domingo 18 de Junio de 2006, 17:15 »
0
Gracias Juan!
Creo que la solución era mas sencilla de lo que parece, pero como siempre, me gusta complicarme la vida....
Un abrazo, cya...

         Splash splashForm = new Splash();
         splashForm.Show();
         Application.DoEvents();
         Thread.Sleep(3000);   
         splashForm.Close();               
         Application.Run(new MainForm());