c# - Silverlight - 在后台线程中呈现控件

标签 c# multithreading silverlight printing dispatcher

我需要打印 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/

相关文章:

c# - 无法转换类型为 'System.Linq.EnumerableQuery` 1[Entities.Test ]' to type ' System.Data.Objects.ObjectQuery`1[Entities.Test]' 的对象

c# - Linq-to-Sql:递归获取 child

c# - ManualResetEvent 的可能竞争条件

silverlight - Mvvm Light和EventToCommand-文本框LostFocus触发两次

c# - 在 C# 中使用多个接口(interface)键入多态值

c# - 使用 .Net 连接到 openssl 服务器

java - 选择器、轮询、Netbeans 平台应用程序和性能分析解释

Java MySQL 防止竞争条件

SilverLight: child 游戏编程

Silverlight MouseLeftButtonDown 事件未触发