La aplicación CE 6.0 / .NET CF 3.5 ha encontrado un error grave (MC3100)

Al salir de mi aplicación .NET CF 3.5 en el Motorola MC3100 (solo versión CE 6.0), aparece el mensaje de error "La aplicación xxx ha encontrado un error grave y debe cerrarse". Luego necesito arrancar el dispositivo en caliente para que la aplicación vuelva a funcionar.

Este código funciona bien hasta que se cierra la aplicación y solo falla si se configura una fuente en un control de la aplicación. Todo también funciona bien en .NET CF 2.0 y en todos los demás dispositivos Motorola, Intermec, Psion, HHC que he probado con .NET CF 3.5.

Aquí está mi código de prueba actual:

[MTAThread]
static void Main()
{
  Control oCtrl = new Control();
  oCtrl.Font = new System.Drawing.Font("Tahoma", 10F, System.Drawing.FontStyle.Bold);

  // Setting the controls font to null works
  // oCtrl.Font = null;  Works

  // Setting the Control to null does not work, still get error
  // oCtrl = null;       Doesn't work

  // Setting a font, not on a control, also works fine.
  // System.Drawing.Font font = new System.Drawing.Font("Tahoma", 10F, System.Drawing.FontStyle.Bold);
}

He visto algunos enlaces que parecen relacionados:

Pero hasta ahora la única recomendación que le he encontrado es eliminar tipografías en la aplicación. En este caso, hay demasiados lugares donde se configuran las fuentes, incluidos los ensamblajes vinculados, que sería imposible.

¿Alguien más ha visto algo como esto? Parece que tiene algo que ver con los controles que no eliminan correctamente las fuentes en estas versiones.

preguntado el 22 de mayo de 12 a las 20:05

Supongo que si mueve ese código a una forma simple que se inició a través de Application.Run, ¿todavía tiene ese problema? -

Sí lo hace. Comencé con nuestra aplicación completa y reduje el código hasta que aislé el problema en ese par de líneas. -

Después de horas y horas de depuración, ahora estoy en el mismo punto. ¿Encontraste una solución a tu problema? -

Hasta ahora, mi mejor solución es retroceder rev a CF 2.0. -

8 Respuestas

Me enfrenté exactamente al mismo problema. Intenté lo siguiente (ninguno resolvió el problema):

  • Quitar todos los new Font() declaraciones
  • Utiliza Form.Close() en lugar de Application.Exit()
  • Mover toda la aplicación a .NET CF 3.5
  • Intenta eliminar las dependencias de SQLite

La única solución que finalmente funcionó para nuestro caso (sin embargo, no es una solución "bonita"), ha sido el siguiente comando en el MainForm.Closed()

Process.GetCurrentProcess().Kill()

Respondido el 06 de Septiembre de 13 a las 22:09

He tenido este problema exacto con el MC3190. La solución que encontré fue realizar un seguimiento de todos los formularios que se abrieron en la aplicación agregando cada instancia a una lista global y, al salir de la aplicación, recorrer la lista y llamar a Form.Dispose en cada elemento de la lista. Me ha estresado durante meses.

respondido 30 nov., 13:14

Encontré el mismo problema: Motorola MC3100, con wince6, solo se bloquea al salir de la aplicación cuando se ejecuta de forma independiente, y no se bloquea cuando se ejecuta con el depurador VS adjunto. cuando fallaba, el sistema operativo era HS y la única solución era arrancar el dispositivo en frío.

Y me las arreglo para lidiar con eso con la siguiente solución.

Mi aplicación estaba usando Application.exit() en un subformulario modal, y parece que no funciona bien con algunos recursos no administrados que usa la fuente.

en mi caso, la causa precisa fue usar new Font(...) en mi formulario principal. usarlo en un subformulario modal no causó ningún problema.

Traer de vuelta application.exit() en el formulario principal tampoco funcionó, ni desechar explícitamente los recursos de fuentes (hice muchos intentos orientados de esta manera).

Al final, la única solución que encontré que funciona fue salir de la aplicación cerrando el formulario principal en lugar de usar application.exit(), y funciona bien.

Respondido 06 Feb 13, 13:02

Application.Exit() no es una forma recomendada de cerrar aplicaciones. Cierre todos los formularios abiertos para cerrar la aplicación.

http://blogs.msdn.com/b/tom_krueger/archive/2005/02/24/379678.aspx

respondido 28 mar '13, 11:03

Tenga en cuenta que la publicación de blog que cita es mucho anticuado. - daniel hilgarth

Experimentamos este problema con dispositivos Motorola MC3190 que ejecutan Windows CE 6.0 / .NET 3.5 CF. Durante meses nos encontramos con un cuadro de diálogo de error fatal intermitente al cerrar nuestra aplicación. Se exploraron todas las opciones posibles, desde las excepciones de ThreadAbort hasta asegurarse de que cada recurso se eliminó correctamente.

Normalmente, si un dispositivo no tiene una fuente en particular o está tratando de acceder a una que no se reconoce, se establecerá de forma predeterminada en Arial. Sin embargo, con el MC3190, si no se reconoce una fuente, el dispositivo mostrará un cuadro de diálogo de error fatal y se congelará después de salir de una aplicación. Esto hace que el usuario tenga que realizar un arranque en caliente (a veces, un arranque en frío).

se nos ocurrió dos soluciones a este problema:

  1. Establezca la fuente de toda la aplicación en algo que sea compatible (reemplace Tahoma con Arial)
  2. Restablezca cualquier objeto de fuente global ya sea creando una instancia con una fuente compatible O configurando en nulo.

Respondido el 06 de diciembre de 13 a las 18:12

Debe crear un formulario y ejecutar su código en el contexto Application.Run(). Al final de Run, muchos recursos se eliminan "por arte de magia". De lo contrario, debe desechar todos los recursos que deben desecharse.

Respondido 29 ago 14, 15:08

Encontramos el mismo problema y lo solucionamos con esta línea de código en MainForm.Closed()

Process.GetCurrentProcess().Kill()

Respondido el 04 de Septiembre de 14 a las 10:09

Tuve el mismo problema en un Motorola 9190-G usando .NET Compact Framework 3.5. A veces tenía que arrancar el dispositivo en caliente porque se congelaba después de cerrar mi aplicación.

Pude solucionar el problema especificando la fuente del formulario ListView estaba contenido en el Constructor ser Arial, 10pt, Regular. Luego programáticamente configuré la fuente a mi fuente deseada. Por ejemplo, myListView.Font = new System.Drawing.Font("Tahoma", 11F, System.Drawing.FontStyle.Bold);.

Si tuviera la fuente configurada en cualquier otra combinación de fuente/estilo de fuente/tamaño, recibiría el mensaje de error "el programa encontró un problema grave y debe cerrarse" al cerrar la aplicación en el dispositivo móvil.

respondido 26 mar '15, 15:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.