clairenes
Messages postés24Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention30 août 2005
-
10 août 2005 à 10:38
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 2010
-
11 août 2005 à 08:40
salut tout le monde!
je n'y comprends plus rien!
j'ai crée un thread qui lance une fonction qui remplie un dataset mais
etrangement il arrive au datareader.fill() et il ne me dit plus rien!
en plus l'etat de mon thread reste toujours a Unstarted et ce n'est pas
parce ca va trop vite j'ai deja essayer avec le sleep().
j'ai egalement essayer de rejouter le .join() mais ca ne change rien non plus!
en gros je ne sais vraiment plus quoi faire! une idee?? svp
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 10 août 2005 à 11:03
Hello,
Où as-tu mis ton sleep ? Si ce n'est pas ce que tu as fait, essaie de le mettre après le t.Start() et la MessageBox.
Je ne suis pas un pro des threads, mais peut-être que ton thread principal éxécute le MessageBox.Show avant que ton thread secondaire n'ait changé d'état.
clairenes
Messages postés24Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention30 août 2005 10 août 2005 à 14:31
lourd?? tu rigoles ou quoi?? 3 jours que je rame la dessus, j'accepte
de tester toutes les idees que tu as! et en plus ca marche! il passe a
l'etat Running! mais alors pourquoi il n'atteind jamais la suite de la
fonction? en plus ça voudrait dire que le chargement est super rapide
alors que lorsque je le chargeais en dehors du thread il me prennait
qques bonnes minutes et puis lorsque je lui demande de me faire
apparaitre les donnees dans un dataGrid je n'ai rien. Est ce qu'il faut
faire un truc spécifique apres?
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 10 août 2005 à 14:41
Hello,
Voivi a mon avis ce qui se passait :
Une fois le t.Start fait, ton thread principal exécute directement
MessageBox.Show("etat2 du thread : "+t.ThreadState);
sans laisser le temps au thread t de changer d'état.
Comme ton Fill prend beaucoup de temps, et que tu avais l'état Unstarted, tu pensais que quelque chose n'allais pas, et tu arrêtais le processus avant la fin.
Thread principal Thread t
---------------- --------
|
t.Start()------------------>
MessageBox |
| t.ThreadState = Runing
| ChargementDataSet()
| |
... ...
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 10 août 2005 à 14:45
En plus, si ton Fill est si lent, et que tu demande de remplir un DataGrid avec un DataSet pas encore complétement rempli, je ne sais pas comment il réagit.
Au fait, comment ça se fait qu'il soit aussi lent, il y a des millions de lignes dans cette tables ??
clairenes
Messages postés24Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention30 août 2005 10 août 2005 à 14:54
pas loin oui. mais comment ca j'arretais le processus avant la fin? il
faut que je fasse quoi pour lui permettre de continuer jusqu'a ce qu'il
arrive au bout? la je bloque, desolée de t'embêter autant
clairenes
Messages postés24Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention30 août 2005 10 août 2005 à 15:06
pour Lutinore :
vraiment dsl je l'ai mal placé comme tu as pu le voir, je te fais mes
plus plates excuses! l'autre jour quand je l'ai teste ça a marché
depuis j'ai fait des modifs et je ne l'ai pas replacé au bon endroit.
pour tout le monde :
en fait , si j'ai bien compris ce dont j'ai besoin c'est d'un moyen de
signaler a ma fonction de remplissage du dataGrid que la chargement du
dataset est terminé. Est ce que pour cela il faut que je créé un
nouveau thread? ou c'est possible plus simplement?
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 10 août 2005 à 16:48
Un moyen que je vois, c'est d'ajouter un event à ta classe ThreadArgs, afin de pouvoir déclencher cet event lorsque la méthode est terminée. Si tu ne sait pas comment faire, dis-le moi, j'essaierai de poster une source demain à ce sujet.