2010-06-02 10 views
0

J'ai une application qui, comme toute autre application, se bloque de temps en temps pour diverses raisons.Crash d'application

Quand il plante, il le fait gracieusement et les utilisateurs reçoivent un bon message de l'accident. Dans le même temps, le crash est signalé sur le serveur pour analyse afin qu'il puisse être corrigé dans les futures versions. Cependant, je voudrais que l'application continue à travailler à travers le crash. Cela signifie que je voudrais exécuter les formulaires de manière «atomique». Si elle tombe en panne, elle ne supprime pas toute l'application. Les utilisateurs devraient juste devoir recommencer le travail fait avec le formulaire particulier.

Est-ce quelque chose qui peut être fait par l'architecture? Ou peut-être que les nouvelles versions de framework ont ​​quelque chose à aider?

L'application est construite principalement en C# sur le framework 3.5, mais elle utilise aussi des références externes, des COM et des références de services web.

Je ne suis pas intéressé par une réponse: «bien réparer les accidents». Moi et mon équipe et l'équipe de test travaillent 24 heures sur 24 pour cela.

+0

Est-ce une application Windows une application Web ou autre? –

+0

Il s'agit d'une application Windows qui utilise SQL Server 2008 pour la partie base de données. – Ovi

Répondre

1

Selon le type d'application, il existe un gestionnaire d'exceptions non géré dans la plupart des applications.

Dans les applications Web, System.Web.HttpApplication a un événement d'erreur.

Dans un système d'applications Wpf.Windows.Application a un événement DispatcherUnhandledException.

Dans les formulaires Windows, System.Windows.Forms.Application a un événement ThreadException.

Vous pouvez vous connecter à ces événements et gérer toute exception qui est hors de votre contrôle.

+0

merci, j'utilise à la fois CurrentDomain_UnhandledException et Application_ThreadException. – Ovi

0

Vous devez capturer les exceptions (en supposant qu'il s'agisse d'exceptions en cours d'augmentation) au niveau le plus approprié.

Si vous souhaitez que l'application à exploiter si la forme actuelle soulève une exception, alors vous aurez besoin de quelque chose comme le code suivant:

try 
{ 
    // Show your form 
} 
catch (YourException ex) 
{ 
    // log the exception 
} 

Si plus d'une exception peut être soulevée alors ceux-ci doivent être pris au piège explicitement - ne pas piège Exception.

2

La gestion de l'événement AppDomain.CurrentDomain.UnhandledException peut également s'avérer utile.