Question

Je l'ai lu d'autres questions connexes, mais je ne peux pas vraiment les amener à rapporter à ce que je pensais qu'il était préférable de demander, Im assez nouveau pour WPF et ainsi de suite donc s'il vous plaît garder avec moi.

J'utilise cette api http://www.codeproject.com/KB/WPF/wpf_notifyicon.aspx pour travailler avec la coutume WPF de Windows (en particulier FancyBalloon).

Cependant, je viens sur le problème suivant, il me semble incapable de commencer BalloonTips dans un thread séparé (j'ai besoin parce que je suis analyse des e-mails et donc s'il y a 3 e-mails par exemple, il affiche le premier e-mail (qui fonctionne très bien), mais quand il vient au second e-mail il se bloque avec un TargetInvocationException, { « élément spécifié est déjà l'enfant logique d'un autre élément. Débrancher le premier. »}.

La chose est, im censés travailler avec la même instance et j'ai essayé d'appeler à la fermer avant, le disposer etc, mais en vain. (Là encore, si je dispose, je ne peux pas créer une autre instance comme apparemment les composants d'interface WPF doivent être appelées à partir d'un fil statique tout au long de la mise en boucle des e-mails + affichage ballon, je suis en train d'utiliser la même BalloonTip.

Toutes les suggestions s'il vous plaît? Je suis vraiment à une perte ici et je suis là-dessus depuis un certain temps maintenant: /

Je me demandais s'il y avait quelqu'un

Était-ce utile?

La solution

En général, les contrôles WPF doivent être accessibles et mis à jour uniquement sur le thread principal de l'interface utilisateur. Il y a des contrôles d'affinité de fil dans toute la liaison de données qui jetteront les entrailles une exception si vous affectez à une propriété liée de données à partir d'un thread qui ne sont pas le fil interface utilisateur WPF, par exemple.

Vous pouvez supprimer le code de l'interface utilisateur de votre thread de travail de fond, ou une utilisation judicieuse d'un SynchronizationContext pour appeler à partir de vos extraits de fil de fond de code à exécuter sur le thread d'interface utilisateur.

Si vous êtes nouveau WPF ou un nouveau thread, vous devez garder les choses de l'interface utilisateur sur les fils de fond. WPF a beaucoup de complexité pour vous tenir occupé sans ajouter les maux de tête supplémentaires de problèmes de filetage au mélange.

Autres conseils

Il semble que vous ajoutez le même élément d'interface utilisateur à plusieurs conteneurs parents en même temps.

Par exemple, si je tente myStackPanel.Children.Add (myUIElement) simultanément dans des threads séparés, se référant au même objet d'élément d'interface utilisateur, cela causerait l'erreur que vous voyez.

Si vous avez besoin des mêmes éléments d'interface utilisateur pour plusieurs threads, envisager de les cloner ou de déplacer votre logique d'interface utilisateur pour le thread principal.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top