J'ai un programme C# qui exécute une application de la barre d'état système - transférer/déplacer/créer/éditer des fichiers en arrière-plan.Est-il possible d'avoir un gestionnaire d'exceptions pour plusieurs temporisateurs dans une classe C#?
Il y a beaucoup de gestion des exceptions et de gestion de boucle pour éviter que le programme ne plante ou ne se bloque si le manuel d'utilisateur supprime un fichier avec lequel le programme travaille.
Malheureusement, l'un des ordinateurs sur lequel s'exécute le programme est celui où le programme plante. L'ordinateur est très difficile à obtenir et ne peut pas avoir de logiciel de débogage chargé (c'est un PC embarqué à l'extérieur sans accès au réseau).
J'ai essayé de trouver la cause du crash (comme une exception non gérée) mais je n'ai rien trouvé et je n'ai pas accès au PC car il est dans un endroit éloigné.
J'espérais trouver un moyen d'utiliser AppDomain/un UnhandledExceptionEventHandler pour attraper toutes les exceptions non gérées et les enregistrer pour le diagnostic. Toutefois, l'exception que j'ai créée (délibérément) dans le bureau à l'intérieur de la classe "DoSomething.class" plante l'application WinForm au lieu de consigner l'erreur d'exception.
Mon code est:
//Current domain for the unhandled exception handling
AppDomain currentDomain;
[SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlAppDomain)]
public MainForm()
{
InitializeComponent();
currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionHandler);
CreateTimer.Interval = Settings.Default.CreateTimer;
CreateTimer.Start();
RunCopyProtocol();
ChangeFilesTimer.Interval = 10000;
ChangeFilesTimer.Start();
RunChangeFiles();
throw new Exception("ABC");
}
public void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs args)
{
try
{
Exception ex = (Exception)args.ExceptionObject;
SetLabel(ex);
}
finally { }
}
private string SetLabel(Exception ex)
{
String str;
str = ex.Message;
Label1.Text = str;
return str;
}
private void ChangeFilesTimer_Tick(object sender, EventArgs e)
{
RunChangeFiles();
throw new Exception("2");
}
Pourquoi ne pas lancer une nouvelle exception appelle l'erreur d'exception non gérée? Comment utiliser AppDomain pour obtenir le gestionnaire d'exceptions non gérées pour gérer cette exception/exceptions dans RunChangeFiles?
Code de AppDomain est basé de MSDN examples
Vous pouvez avoir une idée erronée de ce que AppDomain.UnhandledException va vous permettre de faire. Cela n'empêche pas l'application de se terminer lorsqu'une exception non gérée se produit. C'est simplement une notification qui vous permet de nettoyer ou de vous connecter avant la fin du processus. –