我试图在Windows Phone 7应用程序中的位图上呈现文本.
看起来或多或少类似于以下的代码在主线程上运行时可以正常工作:
public ImageSource RenderText(string text, double x, double y)
{
var canvas = new Canvas();
var textBlock = new TextBlock { Text = text };
canvas.Children.Add(textBloxk);
Canvas.SetLeft(textBlock, x);
Canvas.SetTop(textBlock, y);
var bitmap = new WriteableBitmap(400, 400);
bitmap.Render(canvas, null);
bitmap.Invalidate();
return bitmap;
}
Run Code Online (Sandbox Code Playgroud)
现在,由于我必须使用更复杂的东西渲染多个图像,我想在后台线程上渲染位图以避免无响应的UI.
当我使用a BackgroundWorker来执行此操作时,构造函数TextBlock会抛出UnauthorizedAccessException声称这是无效的跨线程访问.
我的问题是:如何在不阻塞UI的情况下在位图上呈现文本?
WriteableBitmap或UIElements,如果有另一种方式来呈现文本.编辑
另一个想法:有没有人知道是否应该可以在另一个线程中运行UI消息循环,然后让该线程完成工作?(而不是使用BackgroundWorker)?
编辑2
要考虑替代方案WriteableBitmap,我需要的功能是:
c# silverlight multithreading writeablebitmap windows-phone-7