Я пытаюсь отобразить текст на растровом изображении в приложении 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;
}
Теперь, поскольку у меня есть для рендеринга нескольких изображений с более сложным материалом я хотел бы визуализировать растровое изображение в фоновом потоке, чтобы избежать зависания пользовательского интерфейса.
Когда я использую BackgroundWorker
для этого, конструктор для TextBlock
генерирует исключение UnauthorizedAccessException
, утверждая, что это недопустимый межпотоковый доступ.
Мой вопрос: как я могу отобразить текст на растровом изображении, не блокируя пользовательский интерфейс?
WriteableBitmap
или UIElements
, если есть другой способ визуализации текста. ] РЕДАКТИРОВАТЬ
Еще одна мысль: кто-нибудь знает, можно ли запустить цикл сообщений пользовательского интерфейса в другом потоке, а затем заставить этот поток выполнять работу? (вместо использования BackgroundWorker
)?
РЕДАКТИРОВАТЬ 2
Чтобы рассмотреть альтернативы WriteableBitmap
, мне нужны следующие функции: