2010-12-01 4 views
1

si j'utilise une application .net et que cette application se bloque fréquemment. Je veux offrir un processus de récupération après un accident, après l'accident, un message sera affiché à l'utilisateur offrant de redémarrer l'application. comment est-il possible d'écrire le code qui le fait dans l'application et qui continue de fonctionner après son crash! ressemble à une étrange boucle de code, mais j'aimerais connaître votre expérience à ce sujet.comment détecter les plantages d'application?

+2

Je suggère également que vous offriez de soumettre les détails de l'accident ainsi vous pouvez corriger ces bogues. :) –

Répondre

3

Vous pouvez vous abonner à l'événement AppDomain.CurrentDomain.UnhandledException et effectuer les opérations depuis le gestionnaire d'événements.

+0

mais si l'application plantait, cet événement serait-il encore déclenché? Je ne trouve pas logique que le code dans l'application continue de fonctionner après un crash –

+1

Après le crash, il sera déclenché. Et veille permettrait d'envoyer un rapport de bug à l'email ou au service de rapport. –

+1

@Ali Tarhini: comme le dit msdn [À compter de la version 4 du .NET Framework, cet événement n'est pas déclenché pour les exceptions qui corrompent l'état du processus] (http://msdn.microsoft.com/fr-fr/library/ system.appdomain.unhandledexception.aspx). AppDomain sera déchargé de toute façon. Le but de cet événement est d'exécuter une logique de récupération. –

-1

Qu'est-ce que cela signifie avec un accident? Si vous obtenez une exception, vous pouvez utiliser try and catch pour gérer ces erreurs.
S'il n'y a pas d'exception, vous devriez essayer de changer le code afin que le programme ne plante pas.
EDIT: le dernier est possible si, par ex. utiliser les mêmes variables dans plusieurs threads.

1

Écrivez le code dans la méthode Main. (En supposant qu'il s'agit d'une application Windows ou d'une application console, elle en aura une).

Fondamentalement, votre principale méthode finit par regarder quelque chose comme ceci:

public static Main(string[] args) 
{ 
    try 
    { 
     RunApplication(args); 
    } 
    catch(Exception ex) 
    { 
     RunCrashRecovery(args, ex); 
    } 
} 

RunApplication est ce que vous avez mis en Main l'origine et RunCrashRecovery est le code qui envoie les informations de l'accident et demande à l'utilisateur si elles vouloir redémarrer.

Questions connexes