我使用以下代码克隆画布并在STA线程中使用rendertargetbitmap对其进行渲染(我不想使用调度程序,因为它阻止了UI)。但是,当我调用Arrange时,会出现异常“调用线程无法访问该对象,因为另一个线程拥有它。”如果不进行排列,它会起作用,但是由于我猜测画布的默认宽度和高度为0,因此生成的图像为空白。有什么想法吗?
string canvasString = XamlWriter.Save(newCanvas);
Thread thread = new Thread(() => {
StringReader stringReader = new StringReader(canvasString);
XmlReader xmlReader = XmlReader.Create(stringReader);
Canvas canvas = (Canvas)XamlReader.Load(xmlReader);
canvas.Arrange(new Rect(new Size(scale * w, scale * h)));
RenderTargetBitmap rtb = new RenderTargetBitmap(scale * w, scale * h, 96d,
96d, System.Windows.Media.PixelFormats.Default);
rtb.Render(canvas);
SaveRTB();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();