¿Hay alguna forma de capturar las expeciones que arroja cualquier parte del código? Me gustaría detectar excepciones y manejarlas de manera similar en lugar de escribir bloques de captura de prueba para cada funcionalidad.Capturar excepciones de aplicaciones en una aplicación de Windows Forms
Respuesta
En aplicaciones de Windows Forms, cuando se produce una excepción en cualquier lugar de la aplicación (en el hilo principal o durante las llamadas asincrónicas), puede cogerlo mediante el registro para el evento ThreadException en el Solicitud. De esta forma, puede tratar todas las excepciones de la misma manera.
Application.ThreadException += new ThreadExceptionEventHandler(MyCommonExceptionHandlingMethod)
private static void MyCommonExceptionHandlingMethod(object sender, ThreadExceptionEventArgs t)
{
//Exception handling...
}
Solo en caso de que pueda ayudar a alguien. Asegúrese de registrarse en el controlador de eventos (Application.ThreadException + = ...) antes de ejecutar la aplicación (Application.Run (...);). De lo contrario, no funcionará (como me sucedió a mí) –
Responde la pregunta, pero el enlace que Brian Dishaw tiene en su respuesta es muy completo y tiene todos (si no la mayoría) casos de uso cubiertos.Lo único que no es útil en una aplicación de producción sería el método de devolver un cuadro de diálogo con el mensaje de error. Una aplicación de producción real se enviaría al Registro de eventos, en lugar de tener un cuadro de diálogo emergente en su aplicación. – MacGyver
La respuesta obvia es poner un manejador de excepciones en la parte superior de su cadena de ejecución.
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
Application.Run(new YourTopLevelForm());
}
catch
{
//Some last resort handler unware of the context of the actual exception
}
}
Esto cogerá cualquier excepción que se produce en el hilo principal de la GUI. Si también desea capturar globalmente las excepciones que ocurren en todos los hilos, puede suscribirse al evento AppDomain.UnhandledException y manejar allí.
Application.ThreadException +=
new ThreadExceptionEventHandler(MyCommonExceptionHandlingMethod)
private static void MyCommonExceptionHandlingMethod(
object sender,
ThreadExceptionEventArgs t)
{
//Exception handling...
}
Código copiado de Charith J's answer
Ahora en el consejo ...
Estas opciones sólo se debe utilizar como último recurso, por ejemplo, si desea suprimir excepciones no capturadas accidentalmente de la presentación al usuario. Debería estar atrapando antes siempre que sea posible, cuando sepa algo sobre el contexto de la excepción. Aún mejor, es posible que puedas hacer algo sobre el problema.
El manejo de excepciones estructurado puede parecer una sobrecarga innecesaria que puede solucionar con un catch all, pero existe porque este no es el caso. Además, este trabajo debe hacerse a medida que se escribe el código, cuando el desarrollador tiene la lógica fresca en su mente. No seas flojo y deja este trabajo para más adelante o para que un desarrollador más profesional lo elija.
Disculpas si ya sabes y haces esto.
Ver AppDomain.UnhandledException
y Application.ThreadException
.
Puede suscribirse a AppDomain.UnhandledException Event
Creo que esto es lo más parecido posible a lo que está buscando dentro de una aplicación de formulario de victoria.
http://msdn.microsoft.com/en-us/library/ms157905.aspx
// Add the event handler for handling UI thread exceptions to the event.
Application.ThreadException += new ThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException);
// Set the unhandled exception mode to force all Windows Forms errors to go through
// our handler.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
// Add the event handler for handling non-UI thread exceptions to the event.
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Sin hacer todos estos pasos se corre el riesgo de tener algunas excepciones obtener no controlada.
Este es mi ciclo principal (mi aplicación comienza oculta, con un ícono de barra de estado). Con su código, todavía tengo que ajustar 'nuevo Form1(); Application.Run();' dentro de un try/catch ... – doekman
- 1. Windows Forms: capturar MouseWheel
- 2. ¿Globalizar una aplicación existente de Windows Forms?
- 3. Parpadeo en una aplicación de Windows Forms
- 4. Uso de Console.WriteLine dentro de una aplicación de Windows Forms
- 5. ¿Cómo implementaría MVC en una aplicación de Windows Forms?
- 6. Capturar excepciones en la aplicación javax.swing
- 7. Capturar audio de una sola aplicación en Windows 7
- 8. Agregar temporizador a una aplicación Windows Forms
- 9. ¿Cómo puedo capturar todas las excepciones de una aplicación wxPython?
- 10. Cómo capturar todas las excepciones/accidentes en una aplicación .NET
- 11. Manejo elegante de excepciones de aplicaciones en una aplicación Tornado
- 12. Capturar excepciones de iframe
- 13. Cómo estructurar aplicaciones de Windows Forms de VB.NET
- 14. ¿Cómo se usa Ninject en una aplicación de Windows Forms?
- 15. Cambiar el icono predeterminado en una aplicación de Windows Forms
- 16. combinación de captura en una aplicación Windows Forms
- 17. Panel vs GroupBox en una aplicación de Windows Forms
- 18. llamadas multihilo en la aplicación Windows Forms?
- 19. WPF vs Windows Forms en aplicaciones de escritorio
- 20. Ejecución de una aplicación .exe de Windows Forms
- 21. Java Swing o Windows Forms para aplicaciones de escritorio?
- 22. C# - Capturar mensajes de Windows desde una aplicación específica
- 23. Elegir las fuentes para una aplicación de Windows Forms
- 24. Mapas con la aplicación Windows Forms
- 25. Barras de menú estándar de Windows en Windows Forms
- 26. WPF o Windows Forms
- 27. Fuente predeterminada para la aplicación Windows Forms
- 28. Interfaz web para la aplicación Windows Forms
- 29. Abrir una URL de Windows Forms
- 30. Capturar excepciones no controladas de async
Esto no es algo que desee hacer en lugar de manipular localmente, sino como complemento. Ver puede responder. – Jodrell