2011-02-15 50 views
1

我使用簡單的控制檯應用程序將infopath表單轉換爲PDF文件。以下是我如何解決這個問題的簡要總結。Infopath FormControl掛在control.open

總結: 控制檯應用程序創建一個窗口的形式。當窗體被加載(模態)時,我添加一個infopath控件(Microsoft.Office.InfoPath.FormControl)到這個窗口。那時我調用了infoPathControl.Open(myInfoPathFileStream)。所有這些都是在forloop中完成的。

問題: 隨機應用程序會拋出異常(災難性故障,堆腐敗,等等),甚至更好它會偶爾掛而不發出一個錯誤。記錄和調試使我相信它掛在了infoPathControl.Open(myInfoPathFileStream)調用中。很顯然,對於自動化流程來說,這是不可接受的。

試圖(但失敗了)解決方案

  • 我試過包裹在它自己的(STA)線程每個創建形式和使用的Thread.join。由於COM的問題,這沒有奏效。
  • 我試過在自己的應用程序域中包裝循環的每個迭代。這在一定程度上起作用,但由於appDomain的性質仍然是同步的,它不會解決無錯誤掛起的問題。此外,奇怪的是,我似乎並不總是能夠捕獲COM對象拋出的異常。
  • 最後,我試着在表單線程上放置一個定時器,以便在定時器過期時拋出異常。到目前爲止,如果這種方法有效,我還沒有能夠證明任何一種方式。

任何想法將不勝感激,因爲我已經花了很多時間在這。

謝謝!

回答

1

最後,解決方案是在其自己的可執行文件中運行infopath轉換過程,併爲返回代碼設置成功,失敗和特定類型的錯誤。然後由第二個可執行文件調用超時。如果轉換在一段時間內沒有成功,它將被調用的可執行文件終止。這最終不能解決infopath自動化庫中的問題,但它完成了我們需要完成的工作而不會失敗。

1

不幸的是,你想要做的是在內部進行一項非常昂貴的工作,你可能更適合購買一個工具來爲你做。這裏有一個鏈接,將指向一個廣爲接受的工具,它可以滿足您的需求。

http://social.technet.microsoft.com/Forums/da-DK/sharepoint2010customization/thread/528c3459-074f-43f7-a7a1-d4a169b27c93

讓我知道這是否可以幫助你 - 作爲一個軟件工程師,我知道這違背了在你的一切,但你面對一個非常大的和強大的牆與這一個。