WPF実行可能ファイルがあり、別のプログラムで起動して、この起動プログラムをWPF実行可能ファイルの親ウィンドウとして設定する必要があります(主な目的は、起動プログラムを閉じると、WPF実行可能ファイルもシャットダウンされることです)。私はそれを次のようにできると思いました:Hwndを1つのコマンドラインパラメーターとして(整数文字列として)渡し、SetParentまたはWPF実行可能コード内の任意の関数を呼び出して親を指定できます。しかし、私はそれを機能させることができません。誰かがそれを行う方法、またはそれを行う他の方法を教えてもらえますか?ありがとう!
2 に答える
できません。ウィンドウ ハンドルはプロセスごとです。
その上、あなたはしたくないでしょう。親ウィンドウを別のスレッドに持つことは十分に問題があります。これにより、2 つのスレッドのメッセージ キューが接続されます。つまり、それ以降、同じメッセージ キューを効果的に共有します。そのため、どちらかのスレッドがロックしたり、処理に時間がかかったりすると、両方のスレッドがフリーズします。(そして、私が知る限り、後でメッセージ キューを切り離す方法はありません。) このクロスプロセスを拡張しようとすることを想像してみてください。
いくつかの新しいコードを開始し、既存のウィンドウを親として使用する必要がある場合、プロセスをまたぐことはできません。WPF コードをプロセスにロードし、その中でメソッドを呼び出して、親ウィンドウをパラメーターとして渡す必要があります。そのコードをプロセスにロードする最も簡単な方法は、WPF アプリケーションをクラス ライブラリ (.dll) に変更し、その .dll への参照を追加するか、リフレクションを使用して動的にロードすることです。
@Joe Whiteが言ったように、これをすぐに達成することはできません...あなたが何を得ているのか「推測」できると思います....
おそらく、WinForm MDI の親 (既にその exe) があり、その子として別の WPF ウィンドウ (別の exe) を起動したいと考えています。私は正しいですか?
うーん、その中に新しいWinForm
子ウィンドウを作成しWinFormWPFHostApp
、WPF アセンブリをこのプロジェクトに参照して、他の WPF アプリケーションからContent
のをホストしようとする必要があります。MainWindow
この記事を参照してください...