La aplicación termina súbitamente

02/08/2005 - 23:43 por RFOG | Informe spam
Hola.

Tengo el código de abajo en el evento SelectedIndexChanged de un listbox
para cambiar varias cosas de la propia ficha.

private void m_lbTileSets_SelectedIndexChanged(object sender,
System.EventArgs e)
{
m_cfgMgr.SelectedIndex=m_lbTileSets.SelectedIndex;

m_ckbAnimateDropping.Checked=m_cfgMgr.AnimateDrop;
m_ckbAnimateSelection.Checked=m_cfgMgr.AnimateSelection;
m_ckbExplode.Checked=m_cfgMgr.Explode;
m_ckbDrawGrid.Checked=m_cfgMgr.DrawGrid;

m_nudNumBalls.Maximum=m_cfgMgr.CurrentTileSet.NumTiles;
m_nudNumBalls.Value=m_cfgMgr.NumTiles;

m_nudVertSize.Value=m_cfgMgr.NumVertTiles;
m_nudHorizSize.Value=m_cfgMgr.NumHorzTiles;

m_cbGameType.SelectedIndex=(int)m_cfgMgr.GameType;
m_ckbContinuous.Checked=m_cfgMgr.Continuous;

m_pbImage.Image=Image.FromFile(m_cfgMgr.CurrentTileSet.ImageFile);
}

La línea

m_cfgMgr.SelectedIndex=m_lbTileSets.SelectedIndex;

hace que la clase m_cfgMgr cargue un fichero de disco con varios datos.
Todo lo demás hasta la última línea es típico y no necesita descripción.

Lo curioso de todo es que siempre, a la tercera llamanda al método, la
aplicación termina sin mostrar nada de nada. Depurando, paso todas las
líneas del método hasta la última, y luego salta al código de terminación,
como si en la última línea se hubiera llamado a Application.Terminate();

Preguntas similare

Leer las respuestas

#1 Braulio Diez
03/08/2005 - 10:51 | Informe spam
Hola que hay,

Tiene pinta de que o no hay seleccion en la lista (o la lista esta vacia),
o el fichero que vas a leer esta abierto de forma exclusiva (igual no se
cierra), o que no existe.

Para capturar el error, pon un try y un catch, en el catch pon un
breakpoint y te saltara justo cuando falle la aplicación sacando un mensaje
de error (así puede ver que es lo que pasa), lo más genérico sería:

private void m_lbTileSets_SelectedIndexChanged(object sender,
System.EventArgs e)
{
try { m_cfgMgr.SelectedIndex=m_lbTileSets.SelectedIndex;
}
catch(System.Exception ex)
{
// Breakpoint aquí
// pon cualquier instrucción tonta para poner el breakpoint
messageBox(ex.Description);
}
}

También en las opciones puedes decirle que te salte al debugger cuando se
produzca una excepción.

Dime si esto te ayuda, si no, seguimos con el diagnostico del "enfermo" a
ver si sacamos algo :-)

Un saludo
Braulio


/// --
/// Braulio Díez
/// Desarrollador C#
/// Málaga - España
// --


"RFOG" escribió:

Hola.

Tengo el código de abajo en el evento SelectedIndexChanged de un listbox
para cambiar varias cosas de la propia ficha.

private void m_lbTileSets_SelectedIndexChanged(object sender,
System.EventArgs e)
{
m_cfgMgr.SelectedIndex=m_lbTileSets.SelectedIndex;

m_ckbAnimateDropping.Checked=m_cfgMgr.AnimateDrop;
m_ckbAnimateSelection.Checked=m_cfgMgr.AnimateSelection;
m_ckbExplode.Checked=m_cfgMgr.Explode;
m_ckbDrawGrid.Checked=m_cfgMgr.DrawGrid;

m_nudNumBalls.Maximum=m_cfgMgr.CurrentTileSet.NumTiles;
m_nudNumBalls.Value=m_cfgMgr.NumTiles;

m_nudVertSize.Value=m_cfgMgr.NumVertTiles;
m_nudHorizSize.Value=m_cfgMgr.NumHorzTiles;

m_cbGameType.SelectedIndex=(int)m_cfgMgr.GameType;
m_ckbContinuous.Checked=m_cfgMgr.Continuous;

m_pbImage.Image=Image.FromFile(m_cfgMgr.CurrentTileSet.ImageFile);
}

La línea

m_cfgMgr.SelectedIndex=m_lbTileSets.SelectedIndex;

hace que la clase m_cfgMgr cargue un fichero de disco con varios datos.
Todo lo demás hasta la última línea es típico y no necesita descripción.

Lo curioso de todo es que siempre, a la tercera llamanda al método, la
aplicación termina sin mostrar nada de nada. Depurando, paso todas las
líneas del método hasta la última, y luego salta al código de terminación,
como si en la última línea se hubiera llamado a Application.Terminate();

Respuesta Responder a este mensaje
#2 RFOG
03/08/2005 - 11:58 | Informe spam
¡Aiiiiiiiinnnnnnnggggggggggg!

Ya está encontrado... más dentro he escrito lo siguiente:

try
{
string file=Path.GetFullPath(Application.ExecutablePath)+name+".tls";

Stream stream=File.Open(file,FileMode.Open);
BinaryFormatter bf=new BinaryFormatter();

m_tile=(TileSet)bf.Deserialize(stream);
}
catch(Exception)
{
Application.Exit();
}

Sin comentarios. La rutina contiene GetFullPath en lugar de
GetDirectoryName, genera la excepción y termina silenciosamente...

En fin; el código de arriba lo escribí el lunes por la tarde, así está mi
cabeza.

Saludos y gracias.

En Wed, 03 Aug 2005 10:51:03 +0200, Braulio Diez
escribió:

Hola que hay,

Tiene pinta de que o no hay seleccion en la lista (o la lista esta
vacia),
o el fichero que vas a leer esta abierto de forma exclusiva (igual no se
cierra), o que no existe.

Para capturar el error, pon un try y un catch, en el catch pon un
breakpoint y te saltara justo cuando falle la aplicación sacando un
mensaje
de error (así puede ver que es lo que pasa), lo más genérico sería:

private void m_lbTileSets_SelectedIndexChanged(object sender,
System.EventArgs e)
{
try { m_cfgMgr.SelectedIndex=m_lbTileSets.SelectedIndex;
}
catch(System.Exception ex)
{
// Breakpoint aquí
// pon cualquier instrucción tonta para poner el breakpoint
messageBox(ex.Description);
}
}

También en las opciones puedes decirle que te salte al debugger cuando se
produzca una excepción.

Dime si esto te ayuda, si no, seguimos con el diagnostico del
"enfermo" a
ver si sacamos algo :-)

Un saludo
Braulio







Por qué las matemáticas son incompatibles con el sexo:
Si una polla de 15 centímetros atrae a 10 mujeres, ¿a cuántas atraerá
una
de 30 centímetros?
Varios millones..
Powered by zxFortunes - It's free -
http://sourceforge.net/projects/zxfortune
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida