Pb de thread et freeze du programme [Résolu]

greg76301 14 Messages postés mardi 19 juillet 2005Date d'inscription 15 avril 2006 Dernière intervention - 24 févr. 2006 à 11:22 - Dernière réponse : greg76301 14 Messages postés mardi 19 juillet 2005Date d'inscription 15 avril 2006 Dernière intervention
- 6 mars 2006 à 11:36
bonjour ,

je developpe un media player et lors du chargement de la playlist j'ai
souahité utiliser un thread car selon la taille de la playlist le
programme se fige au chargementde la playlist.

Le probleme c'est que meme avc un thread le programme ne repon tjs pas lors du chargement de la playlist.



Je recupere FileNames de l'openfiledialog et lance mon thread qui
charge une datagridview avc les noms de fichier, les durée, le chemin...



....


if (OpenFileDialog.ShowDialog() == DialogResult.OK)


{


list_fic = OpenFileDialog.FileNames;



thread_load = new Thread( new ThreadStart(load_playlist));


thread_load.Start();


//thread_load.Join();



current_media = (string)Playlist_grid.Rows[0].Cells[3].Value;


play_media();


}


}


private void load_playlist()


{


Playlist_grid.Rows.Clear();


int i = 0;


int nb_fic = list_fic.Length;


foreach (string file in list_fic)


{



Playlist_grid.Rows.Add(i, Path.GetFileName(file), toTime(new
Audio(file).Duration), file);



progbar_load_playlist.Value = (i / nb_fic) * 100;


i++;


}


}


la progress bar navance pas , et le reste des composant saffiche mal et ne sont pas cliquable.

Merci de votre aide =)
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 24 févr. 2006 à 11:34
3
Merci
Salut,

Sans aller jusque dire que le probleme vient de la, tu as deja un souci de cross-threading.
Car tu modifies des propriétés d'objets qu'un thread a créé, depuis un autre thread. Et ca, c'est pas safe. (a savoir dans ton cas, ta progressbar et ton datagridview)

Pour resoudre ce probleme, il te faut utiliser des appels asynchrones. Je t'invite a lire ce tutorial (a force on va croire que je fais de la pub ) et aussi cet article sur la msdn.

Autrement, tu devrais mettre la propriété IsBackground de ton Thread a true;
Et finalement, pourquoi utiliser un foreach dans lequel tu incrementes un int a chaque fichier. Autant utiliser une boucle for a ce moment la ;)


Mx
MVP C#

Merci MorpionMx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de MorpionMx
greg76301 14 Messages postés mardi 19 juillet 2005Date d'inscription 15 avril 2006 Dernière intervention - 24 févr. 2006 à 18:11
0
Merci
merci de ta reponse

Je ne pense pas non plus que le souci vienne du cross-threading ms ds
un souci de propreté jv modifier mon code en suivant ton tutorial.
J'avais utilisé jusqu'a l'heure :
Control.CheckForIllegalCrossThreadCalls = false;



g essayer de mettre IsBackground a true sans succes ..

quand a la boucle j'ai modifié et ca venait de la :-s

un grand merci une fois de plus a Csharp.fr !
Commenter la réponse de greg76301
greg76301 14 Messages postés mardi 19 juillet 2005Date d'inscription 15 avril 2006 Dernière intervention - 6 mars 2006 à 11:36
0
Merci
En fait visiblement le probleme ne viens pas de là, j'ai supprimé le
thread pour tester et meme la petite form que g crée
composé d une progressbar et de 3 label ne s'affiche pas correctement.
il faut attendre la fin du traitement de la playlist pour afficher
correctement cette derniere, c 'est donc ridicule etant donnée que
c'est cette form qui donne l'etat d'avancement de la playlist.
Quelqu'un saurait-il comment est programmer de maniere a ce que le
rafraichissement de laffichage du programme se fasse correctement.

Dans le Windows media player , lorsque l 'on recherche des
fichier ds le pc pour les ajouter a la bibliotheque une fenetre avc une
barre de progression s'affiche avec des données de l'avancement de la
recherche sans que cela s'affiche mal. Quelqu'un saurait il comment
c'est fait?

Merci d'avance.

Je vous joins une image illustrant le bug daffichage de ma form:
Commenter la réponse de greg76301

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.