Manu94600
Messages postés107Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention20 février 2008
-
20 janv. 2006 à 09:00
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 2008
-
20 janv. 2006 à 12:42
Salut à tous,
Voilà je suis en train de faire un programme en C# qui calcul toutes les posibilités dans un parcours labyrinthe. Et mon interfase freeze pendant ce tps de calcul.
Je voudrais savoir s'il y avait un moyen pour faire une petite fenetre de loading ??
Manu94600
Messages postés107Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention20 février 2008 20 janv. 2006 à 10:36
J'ai essayé d'utiliser un thread mais je sais pas si je l'utilise bien.
Alors j'explique :
J'ai un bouton et ce bouton il crée l'objet labyrinthe et commence le calcul.
et dans l'interfase je devrais ensuite avoir le labyrinthe et le parcours effectuer
Donc le voici le code que j'ai mis dans le bouton
monLaby = new Laby();
Thread newProcessus = new Thread(new ThreadStart(monLaby.CalculParcours));
newProcessus.Start();
je fais juste un monLaby.GetParcours(); pour afficher le parcours.
Et donc mon probleme c'est que le processus n'a pas encore fini que j'essai d'afficher le parcours.
Manu94600
Messages postés107Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention20 février 2008 20 janv. 2006 à 11:11
Merci pour ta réponse super rapide sebmafate ;).
J'aurais une autre question à te poser, je voudais maintenant faire une progressBar.
En fait j'aimerai que pendant le tps qu'il calcul, qu'il affiche une progressbar dans un autre fenetre et à la fin du traitement il ferme automatiquement cette fenetre.
Pour ce qui est d'affichier la fenetre c'est bon et de la fermer aussi :).
Mais c'est pour la progressBar.
Alors j'ai eu une premiere idée, c'etait de calculer le tps de traitement 1 première fois, ensuite de faire a chaque fois une moyenne des temps. Mais je sais pas si c'est la meilleur solution ??
Manu94600
Messages postés107Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention20 février 2008 20 janv. 2006 à 11:46
Je sais pas si c'est bon car en faisant :
Form f = new FormLoading();
f.Show();
Thread newProcessus = new Thread(new ThreadStart(monLaby.CalculParcours));
newProcessus.Start();
newProcessus.Join();
f.Close();
monLaby.GetParcours();
En faisant ça, j'ai la fenetre de loading qui se met au dessus et les 2 fenetres se freezent. Quand le calcul est terminé, il ferme la fenetre de loading alors qu'il l'a pas bien affiché du au freeze.
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 20 janv. 2006 à 11:57
Pour la progressbar, il faut reussir a evaluer le temps que ta méthode va prendre, et l'incrementer a chaque iteration d'une boucle. J'ai pas trop d'idées de comment faire reellement vu que je connais pas ton code.
Manu94600
Messages postés107Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention20 février 2008 20 janv. 2006 à 12:11
Bah mon code, il est assez long donc je vais expliquer vite fait le principe.
Le parcours est constitué de 50 portes a passé.
Il faut qu'il y ai 1 et une seul porte à passer à chaque porte passer.
Je m'explique :) :
Je suis a la porte 1, il faut que je trouve qu'une seul porte pour continuer, et quand j'en trouve une et une seul je la comptabilise. Et je me place à la 2eme porte. etc jusqu'à sortir à la porte 50.
Donc j'ai une boucle for(int i=0 ; i<50;i++)
Et donc le début de la progress bar est symbolisé par le passage de la porte 0 et la fin c'est quand il for de la boucle à la 50 eme porte
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 20 janv. 2006 à 12:42
Bon, hé beh je vais tenter de te repondre, mais je te dirais peut-etre une betise parce que j'ai jamais fais ce genre de chose.
Prenons une ProgressBar avec une valeur de 100 pour sa propriété Maximum. S'il y a 50 Portes, on dira qu'il faut augmenter la valeur de la progressbar de 2%, soit mettre sa propriété Step a 2
Et a la derniere ligne de ta boucle for, il va falloir appeler la méthode PerformStep() de ta ProgressBar.
Maintenant, le "probleme", c'est que tu vas appeler une méthode d'un objet appartenant a ton Thread principal depuis un autre thread, ce qui est "illegal". Pour ca, il faut utiliser un appel Asynchrone.
Donc je te ramene a ce tutorial, qui n'est pas compliqué et qui t'expliquera comment acceder proprement a un objet appartenant a un autre Thread