WPF画布在STA线程中排列

时间:2018-09-14 07:14:28

标签: wpf

我使用以下代码克隆画布并在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();

0 个答案:

没有答案