質問

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

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

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

事前に感謝します。

役に立ちましたか?

解決

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

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

[STAThreadAttribute]
static void Main(string[] args)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top