У меня есть класс .NET, который предоставляет два открытых метода: один для создания формы InfoPath, а другой для экспорта в один из поддерживаемых форматов. Я использую Microsoft FormControl для этого. Он размещается в форме, которая не отображается. Меня вызывает приложение Winforms, но в рабочем потоке MTA вместо потока пользовательского интерфейса. Поэтому я создаю поток 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 ()
в InfoPathCreateStaThreadTest.FormControlHost.InitializeComponent () в C: \ Windows \ Temp \ InfoPathCreateStaThreadTest \ InfoPathCreateStaThreadTest \ FormControlHost.Designer.cs: строка 65
После некоторых экспериментов я начал подозревать, что это проблема перекачки сообщений. Затем я столкнулся с этим, что заставляет меня более сильно подозревать так: http://blogs.msdn.com/cbrumme/archive/2004/02/02/66219.aspx
Я пробовал разные способы прокачки сообщений, но безуспешно. Я должен отметить, что альтернатива автоматизации приложения InfoPath нежизнеспособна, если я не могу понять, как скрыть приложение.
Любая помощь будет высоко ценится.