繁体   English   中英

如何创建一个线程安全的C#exe包装器

[英]How to create a threadsafe c# exe wrapper

我正在尝试将HTML转换为PDF。

我已经检查了看起来不太复杂的PDFSharp和ITextSharp,但是那里有一个可执行文件wkhtmltopdf ,到目前为止看来效果最好。

我想将wkhtmltopdf控制台应用程序用作库。

我可以想象这种情况以不同的格式发生了,但是找不到足够具体的解决方案来使用。

有一个现有的C#wkhtmltopdf包装器库,但是它在部署和应用程序挂起方面存在问题。

我只需要传递一个.exe文件的电话,就像这样:

wkhtmltopdf.exe "www.adsf.com" convertedPdfOfAsdf.pdf

我想创建一个剥离以下线程的库:

  1. 将wkhtmltopdf.exe的实例复制到临时位置
  2. 通过反射调用wkhtmltopdf.exe
  3. 删除包含副本wkhtmltopdf.exe的临时位置

我之前从未尝试过类似的方法,因此不确定是否这是解决问题的最佳方法,但是肯定有可重复的解决方案。

PS。 我的解决方案必须是线程安全的。 它将作为Web应用程序运行。

听起来您正朝着DLL地狱前进。 虽然您提出的解决方案可以在实例之间提供分隔,但是它可以非常迅速地迫使您陷入Unable to cast X to X处理Unable to cast X to X异常的情况。

我建议锁定对基础库的访问,并强制您的应用程序等待,或者考虑在线性执行同一代码的多个AppDomain中进行操作。

对于一个站点,我使用ConcurrentQueue (这是一个线程安全的数据结构),以使其更容易添加到队列中,而我的使用者弹出下一件事要处理。

您可以在这里的问题中看到一个示例:

无锁并发队列

因此,只需让上传返回唯一的ID到javascript。

然后,javascript会查询网络服务器以查看文件是否已处理,在此之前,它将使用户知道状态(例如,可能有多少条记录在前)。

根据网站的制作方式和技术,这可能是一种更简单的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM