[英]Silverlight - Render controls in background thread
我需要打印Silverlight UserControl的屏幕截圖,我嘗試使用PrintDocument進行常規操作,但是不幸的是,這花費的時間太長,並且因為它必須在UI線程上發生,所以整個應用程序被鎖定了太長時間。 由於控件包含一個需要測量並打印在許多頁面上的網格,因此需要花費很長時間。
因此,我正在尋找一種無需鎖定UI線程即可執行此操作的方法。 有什么辦法可以在后台線程上再次呈現這些控件(與原始呈現的可見控件分開)? 計划是將它們發送到PrintDocument,或者如果不可能使用WritableBitmap截取它們的屏幕截圖。
我已經走得很快,但是當然我總是遇到線程關聯性問題。 考慮到我不希望這些控件對用戶可見,盡管我希望有一種解決方法?
干杯
您可以使用WriteableBitmap
獲取對要引用的根元素的引用。 如果要從外部源動態加載XAML,則可以使用XamlReader
。 稱它為ScreenshotRoot
WriteableBitmap bmp = new WriteableBitmap(ScreenshotRoot.RenderSize.Width, ScreenshotRoot.RenderSize.Height)
bmp.Render(ScreenshotRoot, new MatrixTransform());
bmp.Invalidate();
您應該能夠在另一個線程中執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.