gpt4 book ai didi

asp.net - 在 ASP.NET 中将 WPF 对象呈现为图形

转载 作者:行者123 更新时间:2023-12-01 13:07:52 24 4
gpt4 key购买 nike

我试图在 ASP.NET 图像处理程序中将基于 WPF 的对象呈现为 PNG。我们在 WPF 中创建了一个设计器,用于创建基于 XAML 的模板。使用 XAML 序列化程序将模板存储在磁盘上很简单。事实证明,提取那些相同的基于 XAML 的序列化对象并在 ASP.NET HTTP 处理程序中重构它们很困难。

XAML 反序列化过程需要在 STA 线程上运行。第一次创建一个线程并将其设置为 STA 并进行反序列化和图像合成。我创建了重构的基于 XAML 的图像,传回并发送到浏览器。对 HTTP 处理程序的后续调用使 Web 服务器崩溃,并显示“调用线程无法访问此对象,因为另一个线程拥有它。”

是否有任何库可以从简单的基于 XAML 的对象生成图像?

最佳答案

我刚才已经回答过了on the MSDN forums ,但我会复制它并在此处进行调整以实现 StackOverflow 的繁荣。 :)

最简单的方法是每次启动一个新的 STA 线程,让该线程处理一个图像,然后线程终止并清理所有内容。尽管线程的启动成本以及所有 WPF Dispatcher 基础结构设置将增加明显的开销,但它不会真正扩展得那么大。您可能想要考虑拥有一个渲染就绪线程池,您可以将作业分配到该线程池中。您基本上应该能够启动仅调用 Dispatcher::Run 的线程,并将它们留在那里。当一个作业进来时,你基本上从池中拉出一个线程并在关联的 Dispatcher 实例上调用 Invoke(你可以通过调用 Dispatcher::FromThread 获得它)传递一个包含你想要在该线程的上下文。完成后,线程将继续运行,因为您之前进行了 Disptacher::Run 调用,您可以将它返回到池中以供下一个作业使用。要清理线程,只需转到它们并调用 Dispatcher::InvokeShutdown。

关于asp.net - 在 ASP.NET 中将 WPF 对象呈现为图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1573685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com