Trap exception

Résolu
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015 - 11 févr. 2008 à 11:54
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre 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

11 réponses

babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015
12 févr. 2008 à 14:21
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
3
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
11 févr. 2008 à 12:15
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
0
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015
12 févr. 2008 à 08:59
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
0
Miltiades Messages postés 233 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 octobre 2010
12 févr. 2008 à 10:22
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015
12 févr. 2008 à 10:40
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
0
Miltiades Messages postés 233 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 octobre 2010
12 févr. 2008 à 10:55
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...
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
12 févr. 2008 à 11:24
Et si tu remplaces :
Error.Show([...])

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

Ca change quelque chose?

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
0
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015
12 févr. 2008 à 11:45
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
0
Miltiades Messages postés 233 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 octobre 2010
12 févr. 2008 à 13:28
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...
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
12 févr. 2008 à 14:23
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
0
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015
12 févr. 2008 à 14:29
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
0
Rejoignez-nous