Trap exception [Résolu]

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

11 réponses

Répondre au sujet
babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 12 févr. 2008 à 14:21
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de babe59
Nikoui 794 Messages postés vendredi 24 septembre 2004Date d'inscription 19 août 2008 Dernière intervention - 11 févr. 2008 à 12:15
0
Utile
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
babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 12 févr. 2008 à 08:59
0
Utile
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
Miltiades 233 Messages postés vendredi 21 mars 2003Date d'inscription 25 octobre 2010 Dernière intervention - 12 févr. 2008 à 10:22
0
Utile
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
babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 12 févr. 2008 à 10:40
0
Utile
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
Miltiades 233 Messages postés vendredi 21 mars 2003Date d'inscription 25 octobre 2010 Dernière intervention - 12 févr. 2008 à 10:55
0
Utile
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
Nikoui 794 Messages postés vendredi 24 septembre 2004Date d'inscription 19 août 2008 Dernière intervention - 12 févr. 2008 à 11:24
0
Utile
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
babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 12 févr. 2008 à 11:45
0
Utile
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
Miltiades 233 Messages postés vendredi 21 mars 2003Date d'inscription 25 octobre 2010 Dernière intervention - 12 févr. 2008 à 13:28
0
Utile
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
Nikoui 794 Messages postés vendredi 24 septembre 2004Date d'inscription 19 août 2008 Dernière intervention - 12 févr. 2008 à 14:23
0
Utile
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
babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 12 févr. 2008 à 14:29
0
Utile
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.