我在后台线程中创建图像时遇到问题。我有一个应该与其他图标合并的主图标(16x16 像素),可以是叠加层。我的代码是这样的:
private void GenerateConnectionIcon()
{
var dGr = new DrawingGroup();
var newGroupItem = new ImageDrawing(_ConnectionIcon, new Rect(0, 0, 16, 16));
newGroupItem.Freeze(); //Here it throws the expection
dGr.Children.Add(newGroupItem);
foreach (var anOverlay in _ConnectionIconOverlays)
{
dGr.Children.Add(new ImageDrawing(anOverlay, new Rect(0, 0, 16, 16)));
}
dGr.Freeze();
var finalIcon = new DrawingImage(dGr);
finalIcon.Freeze();
_ConnectionIconMerged = finalIcon;
}
代码在第三行退出,因为调用线程不是对象的所有者。我对此有点困惑,因为该对象是在上面一行创建的。变量_ConnectionIcon
是一个ImageSource
并且被冻结。
确切的错误信息是The calling thread cannot access this object because a different thread owns it
。
为什么我不能冻结一个在上面一行创建的对象?