2010-04-01 2 views
0

Я прочитал другой связанный вопрос, но я не могу заставить их относиться к этому, поэтому я подумал, что лучше спросить, Im довольно новый для WPF и так далее, поэтому, пожалуйста, несите меня.Проблема с BalloonTips WPF с многопоточным обращением

Я использую это http://www.codeproject.com/KB/WPF/wpf_notifyicon.aspx api для работы с пользовательскими WPF-окнами (в частности, FancyBalloon).

Тем не менее, я сталкиваюсь с следующей проблемой: мне кажется, не удается запустить BalloonTips в отдельном потоке (мне нужно это, потому что я разбираю письма и, следовательно, если есть 3 электронных письма, например, он отображает первый электронная почта (это работает нормально), но когда дело доходит до второго электронного сообщения, оно выходит из строя с помощью TargetInvocationException, {«Указанный элемент уже является логическим дочерним элементом другого элемента. Отключить его первым».

Вещь, им якобы работая с одним и тем же экземпляром, и я попытался позвонить ему, чтобы закрыть его раньше, удалив его и т. д., но безрезультатно. (опять же, если я его удалю, я не могу создать другой экземпляр, поскольку, по-видимому, компоненты пользовательского интерфейса WPF должны вызываться из статического потока, во время цикла электронной почты + отображение воздушного шара, я пытаюсь чтобы использовать тот же BalloonTip.

Любые предложения, пожалуйста? Я действительно в растерянности здесь, и я на ней довольно долгое время:/

мне было интересно, есть ли кто-нибудь

ответ

2

В общем, элементы управления WPF должны быть доступны и обновлены только в основном потоке пользовательского интерфейса. Есть проверки привязки потоков по всем внутренним связям с данными, которые генерируют исключение, если вы назначаете свойство привязки данных из любого потока, который не является потоком пользовательского интерфейса WPF, например.

Вы можете либо удалить код пользовательского интерфейса из потока рабочего фона, либо сделать разумное использование SynchronizationContext для вызова из ваших фоновых фрагментов кода кода для выполнения в потоке пользовательского интерфейса.

Если вы новичок в WPF или новичок в потоковой передаче, вы должны оставить материал пользовательского интерфейса из фоновых потоков. WPF имеет много сложностей, чтобы вы были заняты, не добавляя дополнительную мигание проблем с потоками в микс.

+0

Спасибо, я возьму оба предложенных ответа предложения и изменил способ поведения моего кода – Erika

1

Кажется, вы добавляете один и тот же элемент пользовательского интерфейса для нескольких родительских контейнеров в в то же время.

Например, если я пытаюсь myStackPanel.Children.Add (myUIElement) одновременно в отдельных потоках, ссылаясь на один и тот же объект элемента пользовательского интерфейса, это приведет к ошибке, которую вы видите.

Если вам нужны одни и те же элементы интерфейса для нескольких потоков, рассмотрите их клонирование или перемещение логики пользовательского интерфейса в основную нить.

+0

Спасибо, я возьму оба предоставленные ответы на предложения и изменил способ поведения моего кода. – Erika