Silverlight - 在后台线程中渲染控件

时间:2011-10-31 09:12:15

标签: c# multithreading silverlight printing dispatcher

我需要打印一个Silverlight UserControl的屏幕截图,我已经尝试过使用PrintDocument的常规方法,但不幸的是它花了太长时间,因为它必须在UI线程上发生,整个应用程序也被锁定了长。这需要很长时间,因为控件包含需要在许多页面上测量和打印的网格。

所以我正在寻找一种方法来做到这一点,而无需锁定UI线程。有没有什么办法可以在后台线程上再次渲染这些控件(与原始渲染的可见控件分开)?然后计划将这些发送到PrintDocument,或者如果无法使用WritableBitmap截取它们的截图。

我已经快速离开,但当然我总是遇到线程亲和力问题。鉴于我不希望这些控件对用户可见,虽然我希望有办法解决这个问题?

干杯

1 个答案:

答案 0 :(得分:0)

您可以使用WriteableBitmap

获取对要引用的根元素的引用。如果要根据需要从外部源动态加载XAML,可以使用XamlReader。称之为ScreenshotRoot

WriteableBitmap bmp = new WriteableBitmap(ScreenshotRoot.RenderSize.Width, ScreenshotRoot.RenderSize.Height)

bmp.Render(ScreenshotRoot, new MatrixTransform());

bmp.Invalidate();

您应该可以在另一个帖子中执行此操作。