我在 WPF 中有一个组件,该组件使用边框,并且我使用边框背景属性来更改整个组件的背景颜色。
问题是,当我尝试使用计时器在两种不同的颜色之间切换时,会抛出 invalidOperationException 。 “调用线程无法访问该对象,因为另一个线程拥有它”。在计时器方法上,我放置了代码来更改调度程序对象中的边框属性。
mainBorder.Dispatcher.BeginInvoke((ThreadStart)delegate()
{
mainBorder.BorderBrush = myBrush;
mainBorder.Background = myBrush;
}, null);
但是抛出了异常,我不明白我做错了什么!例如,在我执行代码的同时
lbHolderServico.Dispatcher.BeginInvoke((ThreadStart)delegate()
{
lbHolderServico.Foreground = new SolidColorBrush(HoldLabelsFontColor);
}, null);
更改标签字体颜色,一切正常。
感谢和问候
最佳答案
确保您也在 UI 线程上为 myBrush
创建并设置值。
mainBorder
作为边框,具有线程关联性。然而,Brush还具有线程关联性,因为它源自 DispatcherObject .
(您的第二个示例之所以有效,是因为您正在 UI 线程中创建一个新画笔,而不是使用其他地方创建的画笔...)
关于.net - 从其他线程更改 Border 属性时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4796598/