2011-10-31 53 views
2

我需要打印一个Silverlight UserControl的屏幕截图,我尝试了PrintDocument的常用方式,但不幸的是它需要很长时间,因为它必须在UI线程上进行整个应用程序被锁定的时间太长。这需要很长时间,因为控件包含需要测量并打印在多页上的网格。Silverlight - 后台渲染控件线程

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

我已经快速走了,但当然我总是会遇到线程关联问题。鉴于我不希望这些控件对用户可见,尽管我希望有办法解决这个问题?

干杯

+0

您的意思是使用** WriteableBitmap **类来渲染元素吗? http://msdn.microsoft.com/en-us/library/aa347331(v=VS.95).aspx – Aimeast

+0

我不太确定,但在Silverlight中渲染控件似乎是不可能的。要做到这一点,你需要一个新的分派器。 [MSDN说](http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher(v = vs.95).aspx)分派器只能与UI线程一起使用。它也不能被实例化。 –

回答

0

您可以使用WriteableBitmap

获取对要引用根元素的引用。如果您想要从外部源动态加载XAML,则可以使用XamlReader。说它ScreenshotRoot

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

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

bmp.Invalidate();

你应该能够做到这一点在另一个线程。