2010-04-01 47 views
0

我看了其他相關的問題,但我真的不能讓他們涉及到這個,所以我認爲這是最好問問,Im相當新的WPF等,所以請大家多多包涵。WPF定製BalloonTips問題與多線程

我用這http://www.codeproject.com/KB/WPF/wpf_notifyicon.aspx API定製的WPF的Windows工作(特別是FancyBalloon)。

但是,我遇到以下問題,我似乎無法在單獨的線程中啓動BalloonTips(我需要這個,因爲我解析電子郵件,因此如果有3個電子郵件例如,它顯示第一個電子郵件(工作正常),但是當涉及到第二封電子郵件時,它會因爲TargetInvocationException異常崩潰{{「指定的元素已經是另一個元素的邏輯子元素,請先斷開它。」}。使用相同的實例,我曾嘗試調用它關閉它之前,處理它等但無濟於事(然後再次,如果我處置它,我不能創建另一個實例,因爲WPF UI組件必須從靜態線程調用整個電子郵件+顯示氣球循環,我嘗試使用相同的氣球提示。

有什麼建議嗎?我真的在這裏損失,我一直在這相當長的一段時間了:/

我想知道是否有任何人

回答

2

通常,WPF控件只能在主UI線程上訪問和更新。例如,如果您從任何不是WPF UI線程的線程分配數據綁定屬性,則會在數據綁定內部線程上進行線程關聯檢查,從而引發異常。

您可以從您的後臺工作線程刪除UI代碼,或明智地使用的SynchronizationContext的從代碼的後臺線程片段調用到UI線程上執行。

如果你是新來WPF或新的線程,你應該保持UI的東西了後臺線程。 WPF具有足夠的複雜性來保持繁忙,而不會增加線程問題的混亂。

+0

多虧我帶兩個貢獻答案的建議和更改代碼的行爲方式 – Erika 2010-04-01 05:49:22

1

似乎要添加在相同的用戶界面元素到多個父容器同一時間。例如,如果我在單獨的線程中同時嘗試myStackPanel.Children.Add(myUIElement),引用相同的UI元素對象,則會導致您看到的錯誤。

如果你需要多個線程相同的UI元素,考慮克隆他們或移動您的UI邏輯主線。

+0

多虧我帶兩個貢獻答案的建議和修改的方式我的代碼的行爲 – Erika 2010-04-01 05:49:51