Pregunta

Tengo un programa de Windows Mobile que tiene acceso a un dispositivo conectado a través de una DLL de terceros. Cada llamada al dispositivo puede tener una longitud desconocida de tiempo, por lo que cada llamada incluye una propiedad de tiempo de espera. Si la llamada tarda más que el tiempo de espera especificado para el retorno, la DLL en vez lanza una excepción que mis capturas de aplicaciones sin ningún problema.

El problema que tengo es con el cierre de la aplicación. Si mi solicitud ha hecho una llamada a la DLL y está esperando a que se produzca el tiempo de espera, y luego cierre la aplicación antes de que ocurra el tiempo de espera, mi aplicación se bloquea y requiere que el PDA para ser reiniciado.

I puede asegurarse de que la aplicación espera a que el tiempo de espera antes del cierre, en condiciones normales. Sin embargo, yo estoy tratando de utilizar AppDomain.CurrentDomain.UnhandledException para atrapar cualquier excepción no controlada en el programa y utilizar el evento que esperar a que este tiempo de espera a la espera de que se produzca lo que el programa se puede cerrar finalmente.

Mi problema es que este evento no parece que queda el tiempo suficiente. Si pongo una línea MessageBox.Show("unhandled exception"); en el evento, y luego lanzo una nueva excepción no controlada de forma principal de mi solicitud, veo el cuadro de mensaje para una fracción de segundo, pero luego desaparece sin que yo hubiera hecho clic en el botón Aceptar.

La documentación que he encontrado en este caso sugiere que en el momento en que se llama la aplicación está totalmente comprometida con el cierre y el cierre no se puede detener, pero no pensé que significaba que el método de evento en sí ganó' t acabado. Lo que da (supongo que esa es la pregunta)?

Actualización:. En las ventanas completos (Vista) funciona este como se esperaba, pero sólo si uso el evento Application.ThreadException, que no existe en .Net CF 2.0

¿Fue útil?

Solución

Me encontré con este problema también. Este es un problema conocido en .NET CF (v2.0), pero también tuve que durante el uso de la versión 3.5 (aunque las situaciones en que se produce son más específicas). Puede encontrar el (antiguo y todavía activo) informe de error aquí .

Llamando MessageBox.Show () hace que se cierre inmediatamente, pero en mi caso había dos soluciones: 1) Llamar a la MessageBox.Show () una segunda vez. A continuación, no bloquean hasta que se cierre por el usuario. Puede comprobar el primer MessageBox.Show () cerrado antes de tiempo marcando la DialogResult. No recuerdo que resultan volvió exactamente cuando fracasó, lo recuerdo dando un resultado no predeterminada.

2) Crear un formulario personalizado y llame ShowDialog () en eso. Se trabajó para mí, pero otros han informado de que no funciona. También puede llamar Show () y hacer que el bloqueo de sí mismo (no se olvide de llamar Application.DoEvents () por lo que mantiene los eventos de procesamiento).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top