J'ai une "liste" dans l'application principale et j'essaye d'accéder à ses éléments à partir d'un fil. Je reçois cette exception: { «Le thread appelant ne peut pas accéder à cet objet parce qu'un autre thread est le propriétaire »} {System.SystemException System.InvalidOperationException}élément de liste d'accès à partir du fil
Répondre
DispatcherOperation d = myListBox.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() =>
{
// access your listbox and return something
}));
Ensuite, votre DispatcherOperation exigent la valeur de retour
myValue = d.Result; //Result is of type Object
Vous essayez d'accéder à l'interface utilisateur à partir d'un fil non-UI .
Lire ceci: http://www.codeproject.com/Messages/2927256/Re-WPF-Delegates-The-calling-thread-cannot-access-.aspx
et ceci: http://www.switchonthecode.com/tutorials/working-with-the-wpf-dispatcher
Merci, mais je suis en mesure de définir une valeur à un membre de la liste. Je ne sais pas comment récupérer une valeur en utilisant le répartiteur. – phm
Vous pouvez utiliser un fil croix en déclarant un délégué. Puis créez une méthode et mettez toutes les méthodes qui accèdent à votre liste.
private void SampleMethod()
{
....
}
puis de créer une méthode pour votre thread. Dans cette méthode invoquez votre méthode whick
private void ThreadMethod()
{
thread_delegate d = new thread_delegate(SampleMethod);
d.Invoke();
}
Sur votre déclaration où vous créez votre fil ...
Thread t = new Thread(new ThreadStart(ThreadMethod));
t.Start();
J'ai déjà essayé cette approche, et cela ne fonctionne pas. Je reçois la même exception – phm
Essayez ceci.
MaListbox est un ListBox
namespace TEST
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Thread th = new Thread(AccessList);
th.Start(MylistBox);
}
void AccessList(Object O)
{
ListBox lBox = O as ListBox;
for (int i = 0; i < lBox.Items.Count; i++)
{
MessageBox.Show(lBox.Items[i].ToString());
}
}
}
}
- 1. comment obtenir la valeur de chaîne à partir du fil
- 2. Trouver le fil de premier plan à partir du fil d'arrière-plan
- 3. Fil de la fenêtre VTK à partir du fil principal, C++
- 4. Surveillance du fil asp.net à partir d'une autre page
- 5. Exception d'interruption à partir du fil d'arrière-plan
- 6. Aligner à droite du texte dans un élément de liste
- 7. Masquage dynamique d'un élément à partir du ItemTemplate de DataList
- 8. Ajout d'éléments de menu à partir d'un fil distinct
- 9. Comment supprimer l'espace vide du premier élément et du dernier élément de la liste de sélection?
- 10. Conditions d'utilisation du contenu du fil RSS
- 11. liste de charge de l'image à partir du dossier
- 12. Liaison de zone de liste à partir du backend MVC2
- 13. Comment ajouter du fil à mon serveur?
- 14. Android Détails du fil
- 15. Comment attraper l'exception du fil?
- 16. Mettre à jour ListView dans le fil principal à partir d'un autre fil
- 17. Sécurité du fil de haricots de printemps
- 18. Blocage du fil Java
- 19. Récupère le texte d'un élément à partir du document XML
- 20. Extraction du texte à partir élément XML avec des attributs
- 21. trouver et élément d'affichage à partir du fichier ajax
- 22. Cycle Focus vers le premier élément de formulaire à partir du dernier élément et Vice Versa
- 23. Surveillance du fil .net
- 24. Obtention du texte à partir d'une zone de liste déroulante
- 25. Implémentation du bouton à partir d'une vue de liste personnalisée
- 26. iPhone Mise à jour du rendu Gameloop à partir d'un fil séparé
- 27. Mise à jour du modèle GEF à partir d'un fil d'arrière-plan
- 28. Boîte de dialogue PopUp Android à partir du fil d'arrière-plan
- 29. Obtenir BSSID (adresse MAC) du point d'accès sans fil à partir de C#
- 30. envoyer des sms à partir du fil de fond dans blackberry en utilisant j2me
Merci pour la solution. Ma liste est une liste et l'application se fige lorsque j'essaie d'obtenir le n-ème élément en utilisant votre méthode. –
phm
Dans ce cas, copiez le répartiteur de l'interface utilisateur comme ceci. Dispatcher UIdispatcher = Dispatcher.CurrentDispatcher; avant de commencer votre discussion. Maintenant dans votre thread au lieu de myListBox.Dispatcher utilisez UIdispatcher.Invoke (...) Pouvez-vous me dire comment vous avez appelé la méthode Invoke. Je veux dire votre code. – Amsakanna
Utilisez Invoke et non BeginInvoke. jette le résultat dans le type désiré – Amsakanna