相关疑难解决方法(0)

如何在Windows Phone 7中的后台线程上的WriteableBitmap上呈现文本?

我试图在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的情况下在位图上呈现文本?

  • 请不要建议使用Web服务进行渲染.我需要渲染大量图像,带宽成本不能满足我的需求,离线工作的能力是一个主要要求.
  • 解决方案不一定必须使用WriteableBitmapUIElements,如果有另一种方式来呈现文本.

编辑

另一个想法:有没有人知道是否应该可以在另一个线程中运行UI消息循环,然后让该线程完成工作?(而不是使用BackgroundWorker)?

编辑2

要考虑替代方案WriteableBitmap,我需要的功能是:

  • 绘制背景图像.
  • 给定字体族和大小(最好是样式),测量1行字符串的宽度和高度.不需要自动换行.
  • 在给定坐标处绘制具有给定字体系列,大小,样式的1行字符串.
  • 文本渲染应支持透明背景.即你应该看到角色之间的背景图像.

c# silverlight multithreading writeablebitmap windows-phone-7

14
推荐指数
1
解决办法
2万
查看次数