从其他线程更改Border属性时出现异常

时间:2011-01-25 17:07:48

标签: .net wpf multithreading wpf-controls

我在WPF中有一个组件,这个组件使用边框,我使用边框Background属性来改变整个组件的背景颜色。

问题是,当我尝试在两种不同颜色之间交替使用计时器时,会抛出invalidOperationException。 “调用线程无法访问此对象,因为其他线程拥有它”。在计时器方法上,我将代码更改为Dispatcher对象中的边框属性。

            mainBorder.Dispatcher.BeginInvoke((ThreadStart)delegate() 
            {
                mainBorder.BorderBrush = myBrush;
               mainBorder.Background = myBrush;
            }, null);

但抛出异常,我不明白我做错了什么!例如,在我做代码的同时

lbHolderServico.Dispatcher.BeginInvoke((ThreadStart)delegate()
{
    lbHolderServico.Foreground = new SolidColorBrush(HoldLabelsFontColor);
}, null);

更改标签字体颜色,一切正常。

谢谢和问候

2 个答案:

答案 0 :(得分:3)

确保您也在UI线程上为myBrush创建和设置值。

作为边框的

mainBorder具有线程亲和力。但是,Brush也具有线程关联性,因为它源自DispatcherObject

(你的第二个例子有效,因为你在UI线程中创建一个新画笔,而不是使用在其他地方创建的画笔......)

答案 1 :(得分:1)

另一种方法是将画笔/动画定义为资源并启动动画或在需要时指定画笔。

相关问题