omar235689
Messages postés32Date d'inscriptionvendredi 6 août 2010StatutMembreDernière intervention17 avril 2012
-
16 avril 2012 à 10:49
SCapeFrom
Messages postés11Date d'inscriptionjeudi 29 novembre 2007StatutMembreDernière intervention24 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 !
A voir également:
Le thread appelant ne peut pas accéder à cet objet parce qu'un autre thread en est propriétaire
omar235689
Messages postés32Date d'inscriptionvendredi 6 août 2010StatutMembreDernière intervention17 avril 20125 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à.