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