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

时间:2013-09-04 01:48:18

标签: c# pdf thread-safety wrapper wkhtmltopdf

我正在尝试将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
  4. 的临时位置

    我之前没有尝试过这样的事情,所以不确定这是否是解决问题的最佳方法,但肯定有可重复的解决方案。

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

2 个答案:

答案 0 :(得分:0)

听起来你正朝着DLL地狱迈进。虽然您提出的解决方案会在实例之间提供分离,但它很快就会迫使您陷入需要处理Unable to cast X to X例外的情况。

我建议锁定对底层库的访问,并强制您的应用程序等待,或者考虑在多个AppDomains中以线性方式执行相同的代码。

答案 1 :(得分:0)

对于一个站点,我使用ConcurrentQueue这是一个线程安全的数据结构,以便在我的消费者弹出下一个要处理的东西时更容易添加到队列中。

您可以在此处查看问题中的示例:

Lock Free Concurrent Queue

所以只需让上传返回javascript的唯一ID。

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

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

相关问题