STA工作线程上的InfoPath FormControl

STA工作线程上的InfoPath FormControl,infopath,Infopath,我有一个.NET类,它公开了两个公共方法:一个用于创建InfoPath表单,另一个用于导出为支持的格式之一。我正在使用Microsoft FormControl来执行此操作。它由一个不显示的窗体承载。我被Winforms应用程序调用,但调用的是MTA工作线程,而不是UI线程。因此,我创建了一个STA线程并在其上执行,该线程只工作一次,然后导致此异常: System.InvalidOperationException未处理 Message=“无法获取“FormControl”控件的窗口句柄。不支持

我有一个.NET类,它公开了两个公共方法:一个用于创建InfoPath表单,另一个用于导出为支持的格式之一。我正在使用Microsoft FormControl来执行此操作。它由一个不显示的窗体承载。我被Winforms应用程序调用,但调用的是MTA工作线程,而不是UI线程。因此,我创建了一个STA线程并在其上执行,该线程只工作一次,然后导致此异常:

System.InvalidOperationException未处理 Message=“无法获取“FormControl”控件的窗口句柄。不支持无窗口ActiveX控件。” Source=“System.Windows.Forms” 堆栈跟踪: 在System.Windows.Forms.AxHost.EnsureWindowPresent()中 在System.Windows.Forms.AxHost.InPlaceActivate()中 位于System.Windows.Forms.AxHost.TransitionUpTo(Int32状态) 在System.Windows.Forms.AxHost.CreateHandle()中 位于System.Windows.Forms.Control.CreateControl(布尔值不可修改) 位于System.Windows.Forms.Control.CreateControl(布尔值不可修改) 在System.Windows.Forms.AxHost.EndInit()中 在C:\Windows\Temp\InfoPathCreateStatThreadTest\InfoPathCreateStatThreadTest\FormControlHost.Designer.cs中的InfoPathCreateStatThreadTest.FormControlHost.InitializeComponent()处:第65行

经过一些实验,我开始怀疑这是一个信息泵问题。然后我发现了这个,这让我更加怀疑:

我尝试了各种各样的发送消息的方法,但没有成功。我应该指出,自动化InfoPath应用程序的替代方案是不可行的,除非我能够找出如何隐藏该应用程序


任何帮助都将不胜感激

我正在研究同一个错误,并发现:这将问题归因于意外打开的DEP,并提供了解决方案。我还不知道这是否能解决我的问题。

谢谢你的回复。很抱歉,我的回复被耽搁了很长时间。DEP并没有给我造成问题。我最终实现了InfoPath应用程序的自动化,而不是使用FormControl。祝你好运,让你的问题得到解决


Rob

加载表单后,是否创建工作线程(调用控件的线程)?我一直有这个问题,直到我在父窗体的Load事件中将所有调用移到FormControl。从那以后,我就没有遇到过这个特定的错误(尽管我见过很多其他错误)