5

私は WPF の初心者で、WPF と Windows フォームの統合についていくつか質問があります。

既存の Visual C# Windows フォーム アプリケーションがあります。ボタンクリックで表示できるWPFウィンドウと統合したいと思います。WPF は呼び出しスレッドが STAThread であると想定し、デフォルトで WinForm はスレッドが MTAThread であると想定するため、これは不可能でした。WPF UI を呼び出すために STAThread のアパートメント状態で新しいスレッドを生成しようとしましたが、うまくいきませんでした。Dispatcher.BeginInvoke メソッドと Background Worker も使用してみましたが、どれも問題を解決しませんでした。

1) メインを STAThread としてマークせずに WPF ウィンドウ/コントロールを呼び出すことはできますか? 可能であれば、誰かが私を適切な方向に向けることができますか? 2) これを達成する唯一の方法がメインスレッドを STAThread にすることである場合、アプリケーションの一般的なパフォーマンス/応答性に何らかの影響がありますか?

前もって感謝します。

4

1 に答える 1

8

最も簡単な解決策は、WinForms スレッドを STA で実行することだと思います。STA スレッドの winforms アプリを使用しても問題はありません (実際には多くの場合、デフォルトです)。

これを修正するには、プログラムのメイン メソッドに次の行を追加します。

[STAThreadAttribute]
static void Main(string[] args)
于 2008-10-19T16:47:43.280 に答える