Trap exception [Résolu]

Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Dernière intervention
27 novembre 2015
- - Dernière réponse : babe59
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Dernière intervention
27 novembre 2015
- 12 févr. 2008 à 14:29
Bonjour,

Les try/catch ne fonctionnent pas lorsque j'execute mon programme sur un autre PC ou si le lance mon programme à partir de Visual Studio en faisant CTRL + F5 (mode Release).
Donc au lieu d'afficher une fenetre personnalisée, j'affiche la fenetre d'erreur Windows (jut + bouton continuer/ quitter)

Quelqu'un sait il pourquoi ?

Merci

DT
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Dernière intervention
27 novembre 2015
3
Merci
Je viens de trouver la réponse :

L'objet Application n'est pas "sensible" au try/catch.
En fait, l'objet Application possède un évènement ThreadException qui se déclenche quand justement une erreur non gérée survient.

--- Dans le main ----

Application.ThreadException +=
new
ThreadExceptionEventHandler(MyExceptionHandler);

Application.Run(
new
FrmMain(_userName, _superUser, _pkLogin));
--- ----

public
static
void MyExceptionHandler(
object sender,
ThreadExceptionEventArgs e)
{

Exception ex = e.Exception;

Error.Show(
"Erreur de l'application",
"Erreur interne",
"Program",
"Main", ex.Message +
"\n" + ex.InnerException)

Application.Exit();
}

Merci pour votre aide
DT

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de babe59
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Dernière intervention
19 août 2008
0
Merci
S'agit il d'un type d'exception en particulier (si oui lequel) ou de toutes les exceptions ?

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
Commenter la réponse de Nikoui
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Dernière intervention
27 novembre 2015
0
Merci
pas de type particulier.Dans l'exemple ci dessous, c'est lors d'un accès à une base de données. Mais c'et la même chose si à la place de l'insert SQL je mets simplement  le code : throw
new
Exception(
"ee");

Ex:
Internal

static
int InsertNewHiring()

{
.... Insert SQL
}

////////////////////////////////////////////////////////////////////////////////

private

void btnOk_Click(
object sender,
EventArgs e)
{
   
try
   ...
   {
      ...

      Int32 pkNeawHiring =
Data.InsertNewHiring(
);
      ...

   }

   catch (
Exception ex)
   {

      Error.Show(
"xxxx", ex.Message +
"\n" + ex.InnerException);
   }
}

DT
Commenter la réponse de babe59
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Dernière intervention
25 octobre 2010
0
Merci
c'est quoi les points de suspension entre le try et l'accolade?
si tu as reellement mis du code entre l'accolade et ton try, c'est normale que tu trappes jamais les exceptions...
sinon... c'est tres bizarre...

Nul ne devient grand par la guerre...
Commenter la réponse de Miltiades
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Dernière intervention
27 novembre 2015
0
Merci
Afin de faire les choses bien... J'ai mis un try/catch lors du lancement de l'application et surtout afin de trapper toutes les erreurs
try
   {

      Application.Run(
new
FrmMain(_userName, _superUser, _pkLogin));
   }

catch (
Exception ex)
   {

      Error.Show(
"Erreur de l'application",
"Erreur interne",
"Program",
"Main", ex.Message +
"\n" + ex.InnerException);

      return;
  }

DT
Commenter la réponse de babe59
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Dernière intervention
25 octobre 2010
0
Merci
je suis pas sur que ce soit le meme thread... a vérifier...
si tu veux faire un test, met un try catch juste autour de ton exception... voir si tu la recupere bien...

Nul ne devient grand par la guerre...
Commenter la réponse de Miltiades
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Dernière intervention
19 août 2008
0
Merci
Et si tu remplaces :
Error.Show([...])

par :
MessageBox.Show(
[...]
)

Ca change quelque chose?

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
Commenter la réponse de Nikoui
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Dernière intervention
27 novembre 2015
0
Merci
Militades : si je mets un try/catch au niveau de l'exception (dans la classe correspondante) et non pas dans program.cs sa fonctionne. Par contre pour le thread, pourquoi en execution classique (sans CTRL F5) sa fonctionne ?

Nikoui : je vois où tu veux en venir, mais non cela ne change rien...

DT
Commenter la réponse de babe59
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Dernière intervention
25 octobre 2010
0
Merci
A ma connaissance, les exception sont faites pour etre traitée au plus haut, c'est a dire le plus près possible de celui qui lance l'exception, donc theoriquement c'est pas genant que tu puisses pas intercepter une erreur au niveau de l'application... quand a savoir pourquoi ca marche en debug et pas sans le debug... je sais pas d'ou ca vient ^^

Nul ne devient grand par la guerre...
Commenter la réponse de Miltiades
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Dernière intervention
19 août 2008
0
Merci
C'est toujours bon a savoir :) (même si comme dit plus haut un try/catch sur l'application c'est loin d'être l'idéal...)

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
Commenter la réponse de Nikoui
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Dernière intervention
27 novembre 2015
0
Merci
Je suis d'accord avec toi mais mettre des try/catch partout, c'est pas génial pour la lisibilité et je suis aussi d'accord avec http://www.c2i.fr/code.aspx?IDCode=577  (il y aura toujours une erreur qui nous echappera...)

DT
Commenter la réponse de babe59

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.