0

我已经阅读了其他相关问题,但我无法真正让他们与此相关,所以我认为最好问一下,我对 WPF 很陌生等等,所以请多多包涵。

我正在使用这个http://www.codeproject.com/KB/WPF/wpf_notifyicon.aspxapi 来处理自定义 WPF Windows(特别是 FancyBalloon)。

但是,我遇到了以下问题,我似乎无法在单独的线程中启动 BalloonTips(我需要这个,因为我正在解析电子邮件,因此如果有 3 封电子邮件,它会显示第一封电子邮件(有效很好),但是当涉及到第二封电子邮件时,它会因 TargetInvocationException 而崩溃,{“指定的元素已经是另一个元素的逻辑子元素。首先断开它。”}。

事情是,我应该使用同一个实例,我之前曾尝试调用它来关闭它,处理它等但无济于事。(如果我再次处理它,我无法创建另一个实例,因为显然 WPF UI 组件必须从静态线程调用,所以在整个电子邮件循环+显示气球的过程中,我正在尝试使用相同的 BalloonTip。

请问有什么建议吗?我真的很茫然,我已经做了很长一段时间了:/

我想知道有没有人

4

2 回答 2

2

通常,应仅在主 UI 线程上访问和更新 WPF 控件。例如,如果您从不是 WPF UI 线程的任何线程分配数据绑定属性,则整个数据绑定内部都有线程关联性检查,这些检查将引发异常。

您可以从后台工作线程中删除 UI 代码,或者明智地使用 SynchronizationContext 从后台线程调用代码片段以在 UI 线程上执行。

如果您不熟悉 WPF 或不熟悉线程,则应将 UI 内容置于后台线程之外。WPF 有很多复杂性,可以让您保持忙碌,而不会增加线程问题的额外头痛。

于 2010-04-01T00:57:04.050 回答
1

您似乎正在同时向多个父容器添加相同的 UI 元素。

例如,如果我在不同的线程中同时尝试 myStackPanel.Children.Add(myUIElement) 并引用同一个 UI 元素对象,这将导致您看到的错误。

如果您需要多个线程使用相同的 UI 元素,请考虑克隆它们或将您的 UI 逻辑移动到主线程。

于 2010-04-01T00:56:21.933 回答