我在后台线程中创建图像时遇到问题。 我有一个主图标(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
。
为什么我无法冻结上面创建一行的对象?