我有一个.NET类,它公开了两个公共方法:一个用于创建InfoPath表单,另一个用于导出为支持的格式之一。我正在使用Microsoft FormControl来执行此操作。它由一个无法显示的表单托管。我被Winforms应用程序调用,但是在MTA工作线程而不是UI线程上。所以我创建一个STA线程并在其上执行,它只运行一次然后导致此异常:
System.InvalidOperationException未处理 Message =“无法获取'FormControl'控件的窗口句柄。不支持无窗口ActiveX控件。” 来源= “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(Boolean fIgnoreVisible) 在System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 在System.Windows.Forms.AxHost.EndInit() 在C:\ Windows \ Temp \ InfoPathCreateStaThreadTest \ InfoPathCreateStaThreadTest \ FormControlHost.Designer.cs中的InfoPathCreateStaThreadTest.FormControlHost.InitializeComponent():第65行
经过一些实验,我开始怀疑这是一个消息泵问题。然后我遇到了这个,这让我更加怀疑:http://blogs.msdn.com/cbrumme/archive/2004/02/02/66219.aspx
我尝试了各种方法来抽取信息而没有运气。我应该提一下,除非我能弄清楚如何隐藏应用程序,否则自动化InfoPath应用程序的替代方案是不可行的。
非常感谢任何帮助。
答案 0 :(得分:1)
您是否在表单加载后创建工作线程(调用控件的线程)?我遇到了这个问题,直到我将所有调用移到父窗体的Load事件中的FormControl。由于这样做,我没有遇到这个特定错误(虽然我见过很多其他错误)
答案 1 :(得分:0)
我正在研究同样的错误并发现:http://social.msdn.microsoft.com/Forums/en-US/clr/thread/9c36e5d3-a75c-4760-9070-5dbaf188992b/将问题归因于意外启用DEP并提供修复。我不知道这是否能解决我的问题。
答案 2 :(得分:0)
感谢您的回复。很抱歉我的回复很久了。 DEP不会给我带来麻烦。我最终自动化了InfoPath应用程序而不是使用FormControl。祝您的问题得到解决!
罗布