对Backgroundworker中的画笔进行只读访问

时间:2012-04-25 14:22:42

标签: wpf multithreading backgroundworker invalidoperationexception brush

我有一个对象列表,其中包含一个Brush(属性名称为“Color”)。

在Backgroundworker中,我想将这些对象的内容写入文件。 一切正常,直到我尝试读取画笔属性的颜色。

//this works fine
var brush = myObject.Color;

//this fails with InvalidOperationException
var c= ((SolidColorBrush)myObject.Color).Color;

似乎我的代码以某种方式修改颜色,但我看不到在哪里/如何。 有没有办法只读访问画笔的颜色?

此致

tabina

2 个答案:

答案 0 :(得分:0)

我是否感觉到您正在访问未创建它们的线程上的UI对象。您无法从BGW线程访问UI对象。这是不要忘记使用BGW类的黄金法则

答案 1 :(得分:0)

如果在将对象添加到该列表后不需要修改它们,您可以在从另一个线程访问它们之前尝试Freeze它们。

确保在创建这些对象的UI线程中发生冻结调用。您也可以事先致电CanFreeze来检查是否可以冻结。