2011-10-31 56 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();

你應該能夠做到這一點在另一個線程。