我正在使用一个简单的控制台应用程序将 infopath 表单转换为 PDF 文件。这是我将如何处理此问题的简短摘要。
摘要: 控制台应用程序创建了一个窗口窗体。当表单被加载(模态)时,我将一个信息路径控件(Microsoft.Office.InfoPath.FormControl)添加到这个窗口。那时我调用 infoPathControl.Open(myInfoPathFileStream)。所有这些都是在一个 forloop 中完成的。
问题: 应用程序会随机抛出异常(灾难性故障、堆损坏等),甚至更好的是它偶尔会挂起而不会抛出错误。记录和调试让我相信它挂在 infoPathControl.Open(myInfoPathFileStream) 调用中。显然,对于自动化过程来说,这是不可接受的。
尝试(但失败)的解决方案
- 我尝试将每个创建的表单包装在它自己的(STA)线程中并使用thread.join。由于 COM 的问题,这不起作用。
- 我尝试将循环的每次迭代都包装在它自己的应用程序域中。这在一定程度上奏效了,但是由于 appDomains 的性质仍然是同步的,它不会解决挂起没有错误的问题。此外,奇怪的是,我似乎并不总是能够捕获 COM 对象引发的异常。
- 最后,我尝试在表单线程上放置一个计时器,以便在计时器到期时抛出异常。到目前为止,我还无法证明这是否有效。
任何想法都将不胜感激,因为我已经为此花费了大量时间。
谢谢!