cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 2013
-
31 mai 2005 à 08:53
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 2013
-
3 juin 2005 à 08:08
En fait, je dois charger des données dans un Listview, et ca peut prendre du temps.
Donc pendant le temps de chargement et d'affichage, j'affiche une form pour faire patienter l'utilsateur...
Voila comment je m'y prend :
try
{
Thread tWait = new Thread(new ThreadStart(PleaseWait));
tWait.IsBackground = true;
tWait.Start();
// Ici : Chargement des données à afficher depuis le fichier
// Ici : Remplissage du listView avec ses données
tWait.Abort();
... // Ici encore deux trois opérations
}
catch
{
// Affiche une messageBox d'erreur
}
// Affichage de la form qui fait patienter
private void PleaseWait()
{
this._frmWait = new frmWaiting(unString);
this._frmWait.ShowDialog();
}
// Voici le code que j'ai dans la form qui fait patienter
public frmWaiting(string s)
{
this.InitializeComponent(); if(s !null) label.Text s
}
// Dans le load de la form, je mets un timer en marche.
// A chaque ticks, je fais tourner une picture box dans 90°
// Dans la méthode Dispose je fais un timer.Dispose (si jamais...)
private void tmrRotateImage_Tick(object sender, System.EventArgs e)
{
this.pictureBox.Image.RotateFlip(RotateFlipType.Rotate90FlipNone);
this.pictureBox.Refresh();
}
Le problème : Parfois (environ 1 fois 10) j'ai le message d'erreur suivant qui se produit (une exception non gérée blabalba) System.Threading.ThreadAbortException: Thread was being aborted.
Alors si quelqu'un à une idée du problème, c'est volentier que je prends la solution!
Merci.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 3 juin 2005 à 08:08
Merci de ta réponse.
En fait, j'ai trouvé la source d'erreur, ca vennait apparement du fait que parfois je killais mon thread (en faisant abort) alors même que ma form (qui est sensé faire patienter) n'était pas initialisée... Du coup elle avait pas de Handle, ce qui semblait poser problème.
Si je fais un test sur IsHandleCreated (property de ma form) alors j'ai plus de problème....
Ceci dit, je suis certain que ta solution fonctionne aussi, alors je la valide.
Merci de ton aide.
tchoucky
Messages postés48Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention 1 septembre 20062 2 juin 2005 à 12:10
Salut,
c normal, tu fait "tWait.Abort();" qui dans son comportement normal
lève une exception de type System.Threading.ThreadAbortException qu'il
faut que tu catch pour arrêter le thread.
Mais je préfère quand même me mettre un booleen que je met à jour quand j'ai finit mon traitement.
Et dans la boucle qui gère ton image tu test ce booleen et tu ferme la form si necessaire
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 2 juin 2005 à 12:15
Euh, l'Exception System.Threading.ThreadAbortException est levée dans le nouveau thread qui est démarré, c'est à dire ici ma méthode PleaseWait() (il faudra que je pense à la renommer celle la ).
Je ne vois pas comment corriger mon probleme ?
tchoucky
Messages postés48Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention 1 septembre 20062 2 juin 2005 à 12:19
J'ai pas été assez explicite, quand tu fais "tWait.Abort();" ça veux
dire lève une exeption System.Threading.ThreadAbortException dans le
thread "tWait"
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 2 juin 2005 à 14:58
Merci, tu viens de répéter ce que j'ai écris dans le message juste dessus....
La question c'est comment résoudre ce problème? Car j'ai effectivement (environ 1 fois sur 10) un message qui s'ouvre et qui me dit qu'une Exception non gérer (....) s'est produite.
Un bloc try catch dans la méthode PleaseWait ne change pas le problème !
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 2 juin 2005 à 15:27
En faisant un frmWait.Close() donc ?
J'essayerai ça ce soir, je te donne des nouvelles demain, mais si mes souvenirs sont bons, j'avais déjà essayé ce système et ça n'avait pas marché.