我需要打印 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();
您应该可以在另一个线程中执行此操作。
关于c# - Silverlight - 在后台线程中呈现控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7951663/