“Le thread appelant doit être PERSONNEL, parce que de nombreux composants de l'INTERFACE utilisateur besoin de cette” erreur lors de la création d'un WPF Fenêtre pop-up dans le thread
J'ai une application WPF dans lequel un thread vérifie une certaine valeur. Dans certains cas, je fais preuve d'une pop-up Window
afin d'afficher un message. Quand j'ai créer cette fenêtre pop-up dans le fil, une exception est levée par la fenêtre pop-up du constructeur:
"Le thread appelant doit être PERSONNEL, parce que de nombreux composants de l'INTERFACE utilisateur, l'exigent."
Comment puis-je résoudre ce problème?
C'est mon code pour la création de la fenêtre pop-up:
//using System.Threading;
//using System.Windows.Threading;
Thread Messagethread = new Thread(new ThreadStart(delegate()
{
DispatcherOperation DispacherOP =
frmMassenger.Dispatcher.BeginInvoke(
DispatcherPriority.Normal,
new Action(delegate()
{
frmMassenger.Show();
}));
}));
Messagethread.Start();
J'ai trouvé le Problème de la Racine. J'ai un timer qui, dans la chaque horloge.tique , pour vérifier les nouveaux messages et de montrer ensuite chaque nouveau message. Thread horloge de faire mon travail si dur.
Hors-sujet: Dans WPF, windows sont appelés: "windows"; pas de "formes". Ce dernier terme est utilisé dans un autre framework d'INTERFACE, Windows Forms.
Je Vous Remercie
Double Possible de Le thread appelant doit être PERSONNEL, parce que de nombreux composants de l'INTERFACE utilisateur besoin de cette
Hors-sujet: Dans WPF, windows sont appelés: "windows"; pas de "formes". Ce dernier terme est utilisé dans un autre framework d'INTERFACE, Windows Forms.
Je Vous Remercie
Double Possible de Le thread appelant doit être PERSONNEL, parce que de nombreux composants de l'INTERFACE utilisateur besoin de cette
OriginalL'auteur Rev | 2010-04-17
Vous devez vous connecter pour publier un commentaire.
Pour le fil que vous essayez de démarrer l'interface graphique de l'élément, vous devez définir l'appartement de l'état du thread STA AVANT vous le démarrez.
Exemple:
thx pour l'aide mais cela ne fonctionne pas. ce problème était lié à Wpf et le Filetage.Je pense que Nous Devrions utiliser le Répartiteur pour les résoudre. Ce Qui Concerne Les Rev
Vous avez probablement 2 questions. Le thread STA et le répartiteur. Si vous voulez de l'aide avec le répartiteur laissez-moi savoir et je peux vous montrer comment.
Je pense répartiteur peut m'aider. 😉
OriginalL'auteur
Absolument
Dispatcher
est la seule façon de faire quelque chose (dans le Thread spécifique) lorsque nous travaillons avec le multi-threading dans WPF!Mais pour travailler avec Répartiteur nous devons savoir 2 choses:
[fenêtre.répartiteur] ou etc.
call dispatcher in the main thread of app
(le thread doit être thread STA)Ainsi, par exemple: si nous voulons montrer à d'autres fenêtre[wpf] dans un autre thread, on peut utiliser ce code:
Astuce:
Remember - we can't access any fields or properties from out dispatcher, so use that wisely
OriginalL'auteur