Question

Existe-t-il un équivalent .net de la fonctionnalité inattendue () / set_unexpected () de C ++?

Modifier: Désolé, j'ai déjà omis certains détails:

Langue: C # 2.0

J'ai des applications existantes qui semblent lancer une exception non gérée quelque part. Je veux juste mettre quelque chose en place pour arrêter la douleur du client jusqu'à ce que je puisse retracer la source réelle du problème. En C ++, la fonction pointée par set_unexpected () est appelée, pour autant que je sache, lorsqu'une exception par ailleurs non gérée est renvoyée à la routine principale. D'où ma question sur une fonctionnalité équivalente .net.

Était-ce utile?

La solution

Il existe 3 scénarios possibles pour la gestion des exceptions non gérées, en fonction du type de l'application:

  1. Pour l'application Windows Forms, reliez un gestionnaire d'événements à Application.ThreadException
  2. Pour les applications en ligne de commande, raccordez un gestionnaire d'événements à AppDomain. UnhandledException
  3. Pour les applications ASP.NET, dans Global.asax, créez:

    void protected Application_Error (Expéditeur d'objet, EventArgs e)

AVERTISSEMENT: je ne suis pas un développeur c ++, mais d'après ce que j'ai lu, cela devrait répondre à votre question.

Autres conseils

Ces gestionnaires devraient récupérer les exceptions les plus inattendues dans votre application en mode mixte.

private delegate long UnhandledExceptionFilter(IntPtr exception);

[DllImport("KERNEL32.DLL", SetLastError = true)]
private static extern IntPtr SetUnhandledExceptionFilter([MarshalAs(UnmanagedType.FunctionPtr)] UnhandledExceptionFilter filter);

// put these in your bootstrapper
AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;
Application.ThreadException += ApplicationThreadException;
SetUnhandledExceptionFilter(UnhandledExceptionFilter);

void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    ...
}

void ApplicationThreadException(object sender, ThreadExceptionEventArgs e)
{
    ...
}

long UnhandledExceptionFilter(IntPtr exception)
{
    ....
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top