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

标签 .net wpf multithreading wpf-controls

我在 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/

相关文章:

wpf - WPF:使用ViewModels编写烟雾测试

c++ - 这种优化有名称吗?

.net - 如何判断 VB.net 中的网页何时更改了 x%?

c# - 在 XDocument 中按名称在任意深度查询元素

c# - 有没有办法发出 System.Threading.Tasks.Task 完成的信号?

c# - 并发受限的 TaskScheduler 会阻塞自身

java - 在Java中,有没有办法在通知线程后获取线程的实际等待时间

asp.net - SqlDataSource 在变量后面插入代码

wpf - 将未关闭的 PathGeometry 填充到底部

wpf - 是什么导致图标上出现轮廓?