[C#/WPF] Problème de threads

omar235689 Messages postés 29 Date d'inscription vendredi 6 août 2010 Statut Membre Dernière intervention 17 avril 2012 - 16 avril 2012 à 10:49
SCapeFrom Messages postés 11 Date d'inscription jeudi 29 novembre 2007 Statut Membre Dernière intervention 24 mai 2012 - 17 avril 2012 à 16:12
Bonjour à tous,

Je viens vers vous avec un petit problème de threads. Voici mon erreur :
Le thread appelant ne peut pas accéder à cet objet parce qu'un autre thread en est propriétaire.

Pour faire simple, j'ai une MainWindow avec une ListBox que je veux mofidier à partir d'une autre classe sous le même projet.
J'utilise donc un thread qui appelle une méthode qui modifie la listBox. Cependant j'obtiens l'erreur dont je viens de parler
Voilà mon code :


System.Threading.Thread thread = new System.Threading.Thread(
new System.Threading.ThreadStart(
delegate()
{
MainWindow wind = App.Current.MainWindow as MainWindow;
wind.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal,
new Action(
delegate()
{

wind.RemplirListBox(ss);
}
));
}
));

thread.Start();].

Voilà j'espère que j'ai été clair !

4 réponses

omar235689 Messages postés 29 Date d'inscription vendredi 6 août 2010 Statut Membre Dernière intervention 17 avril 2012 5
17 avril 2012 à 15:41
salut,
en fait ce n'est pas suffisant, la solution dont j'ai trouvé consiste à
App.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
{
MainWindow wind = App.Current.MainWindow as MainWindow;

wind.listBox1.Items.Add(m.ToString());
}, null);
il faut évoquer le thread courant de l'application non pas celui créer pour la mise à jour de la listebox, le dispatcher va servir au nouveau thread d’accéder à un objet qui est en cours d'utilisation par l'autre thread qui est bien entendu le thread principal c'est pour cela il faut faire App.current
Voilà.
5