[C#] [thread]

clairenes Messages postés 24 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 30 août 2005 - 8 août 2005 à 18:46
clairenes Messages postés 24 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 30 août 2005 - 9 août 2005 à 09:44
bonjour tout le monde!

je commence juste avec la notion des threads et je ne comprends pas
pourquoi apres ce code la mon thread reste a l'etat unstarted.



ThreadArgs ta = new ThreadArgs(MaConnection);




Thread t = new Thread(new
ThreadStart(ta.ChargementDataSet));


MessageBox.Show("etat1 du thread :
"+t.ThreadState);

t.Start();


MessageBox.Show("etat2 du thread : "+t.ThreadState);



----------------------------------------------



public class ThreadArgs

{



public OracleConnection MaConnection;

public static DataSet ds;



public ThreadArgs(OracleConnection _MaConnection)

{

MaConnection = _MaConnection;

}



public void ChargementDataSet()

{

}



il rentre bien dans la fonction qu'il a en parametre mais le thread reste a son etat initial, jamais il ne passe sur running.

3 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 août 2005 à 19:19
Salut, il est normalement Unstarted avant Start( ) il est Running dans la fonction et Stopped au retour de la fonction, mais ca va trop vite, utilises Thread.Sleep( int ) avant d'afficher l'état après Start( ).
0
clairenes Messages postés 24 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 30 août 2005
9 août 2005 à 09:20
ok merci beaucoup!

je vais essayer
0
clairenes Messages postés 24 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 30 août 2005
9 août 2005 à 09:44
resultat des courses : je me suis rendue compte que c'etait bien le cas
lorsque j'enleve certaines lignes de commande de ma fonction Chargement
DataSet





public void ChargementDataSet()

{

MessageBox.Show("je charge le dataset");



string requete1 = "select * from VW_LIAISONS_TABLES";

//string requete2 = "select * from VW_TABLE_COLUMN";



MessageBox.Show(requete1);

ChangementSession();




OracleDataAdapter MaCommande = new
OracleDataAdapter(requete1,MaConnection);




//OracleDataAdapter MaCommande2 = new
OracleDataAdapter(requete2,MaConnection);





ds = new DataSet();

MessageBox.Show("creation dataset");



MaCommande.Fill(ds,"Table1");

//MaCommande2.Fill(ds,"Table2");




MessageBox.Show("ca y est! dataset chargé et connection libérée!!");

MaConnection.Close();





}



Ca marche tres bien lorsque je supprime les MaCommande.Fill() sinon
l'etat reste a Unstarted, je ne comprends pas. surtout que lorsque j'ai
tester mon programme sans les threads le chargement du dataset prenait
quand meme quelques bonnes minutes.

j'en profite aussi pour me renseigner un petit peu sur les evenements
asynchrones. cette technique est utilisée par les threads ou est ce
qu'il faut absolument passer par les delegués?

merci
0
Rejoignez-nous