0

我在后台线程中创建图像时遇到问题。我有一个应该与其他图标合并的主图标(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

为什么我不能冻结一个在上面一行创建的对象?

4

0 回答 0