2 つのパブリック メソッドを公開する .NET クラスがあります。1 つは InfoPath フォームを作成するメソッドで、もう 1 つはサポートされている形式のいずれかにエクスポートするメソッドです。これを行うために Microsoft FormControl を使用しています。表示されないフォームによってホストされています。Winforms アプリから呼び出されますが、UI スレッドではなく MTA ワーカー スレッドで呼び出されます。そのため、STA スレッドを作成して実行すると、1 回だけ動作し、次の例外が発生します。
System.InvalidOperationException was unhandled Message="'FormControl' コントロールのウィンドウ ハンドルを取得できません。ウィンドウのない ActiveX コントロールはサポートされていません。" Source="System.Windows.Forms" StackTrace: 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() で:
いくつか実験した後、これはメッセージ ポンピングの問題ではないかと疑い始めました。その後、これに出くわしたため、より強く疑うようになりました。
運が悪いので、メッセージをポンピングするさまざまな方法を試しました。アプリを非表示にする方法を見つけられない限り、InfoPath アプリを自動化するという代替手段は実行できないことを述べておく必要があります。
どんな助けでも大歓迎です。