0

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 アプリを自動化するという代替手段は実行できないことを述べておく必要があります。

どんな助けでも大歓迎です。

4

3 に答える 3

1

フォームがロードされた、ワーカー スレッド (コントロールを呼び出すスレッド) を作成していますか? 親フォームの Load イベント内ですべての呼び出しを FormControl に移動するまで、この問題が発生していました。それ以来、この特定のエラーに遭遇していません(他の多くのエラーを見てきましたが)

于 2011-02-15T16:11:29.517 に答える
0

私は同じエラーを調査していて、これを見つけました: http://social.msdn.microsoft.com/Forums/en-US/clr/thread/9c36e5d3-a75c-4760-9070-5dbaf188992b/これは、問題が DEP に起因すると考えています予期せずオンになり、修正を提供します。これで問題が解決するかどうかはまだわかりません。

于 2009-02-27T16:43:28.370 に答える
0

お返事をありがとうございます。私の側で長い間返信が遅れて申し訳ありません。DEP が問題を引き起こしているわけではありません。FormControl を使用するのではなく、InfoPath アプリを自動化することになりました。問題が解決されますように。

ロブ

于 2009-04-05T05:47:49.520 に答える