2013-01-05 4 views
7

Je travaille sur un projet C# et je souhaite utiliser l'événement UnhandledException pour intercepter toutes les exceptions que j'ai pu manquer dans mon projet (en espérant qu'il n'y en aura pas mais que je serai du même côté). Je fais beaucoup de logiciels, donc je veux faire une bibliothèque de classes que tous mes projets utiliseront donc je veux avoir une fonction qui s'occupe de l'initialisation de tous mes projets sans avoir à Copiez et collez le code dans chaque projet pour faire le même travail.AppDomain UnhandledException

Ce que je me demande est si j'ai dans la bibliothèque de classe l'événement d'exception non gérée en utilisant le code suivant

AppDomain currentDomain = AppDomain.CurrentDomain; 
      currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException); 

Est-ce que l'exception non gérée uniquement être utilisé à partir de la bibliothèque de classes ou cette poignée d'événement sera également exeucted de tous les projets que les références à la bibliothèque de classes.

Merci pour toute aide que vous pouvez fournir.

Répondre

5

En supposant que tous vos projets s'exécutent dans le même domaine d'application, cela fonctionnera correctement. Nous avons ce code exact encapsulé dans une DLL commune qui est partagée entre de nombreuses applications.

Une suggestion supplémentaire: si cela est utilisé dans les applications Windows Forms, vous voudrez probablement ajouter un gestionnaire pour System.Windows.Forms.Application.ThreadException. Cela sert de backstop lorsque, par exemple, quelqu'un oublie d'ajouter une gestion des exceptions à un événement de contrôle.

+0

Merci pour votre aide. C'est pour une application console sur laquelle je travaille, mais je vais faire un pas à propos de ThreadException pour les formulaires. Est-ce aussi le cas pour les applications WPF ou simplement les anciennes formes de fenêtres de style – Boardy

1

Il est possible de charger un assembly dans un domaine d'application différent, mais tant que vous chargez les assemblys (comme les bibliothèques de classes) dans le domaine d'application actuel, cela gérera l'exception.

Relation entre les domaines d'application et les ensembles:

http://technet.microsoft.com/en-us/subscriptions/index/43wc4hhs(v=vs.80).aspx

Par exemple, Assembly.LoadFile() ou Assembly.Load() chargera l'ensemble dans le domaine de l'application actuelle.

Votre code pourrait être la création d'un nouveau domaine d'application avec:

AppDomain.CreateDomain(..), il pourrait alors charger les assemblages dans ce domaine, qui ne serait pas pris en charge par votre code.

Si vous faites référence à des bibliothèques dans votre projet, elles seront chargées dans le domaine d'application actuel.

Questions connexes