Запустить исполняемый файл WPF и установить родительский? - PullRequest
0 голосов
/ 05 октября 2011

У меня есть исполняемый файл WPF, и я хочу, чтобы другая программа запустила его и установила эту запускающую программу в качестве родительских окон моего исполняемого файла WPF (основная цель заключается в том, чтобы при закрытии запускающей программы исполняемый файл WPF также выключался). Я думал, что смогу сделать это так: я передаю Hwnd как один параметр командной строки (как целочисленную строку), и я могу вызвать SetParent или любую другую функцию в моем исполняемом коде WPF, чтобы указать родителя. Тем не менее, я не могу заставить его работать. Кто-нибудь может сказать мне, как это сделать, или любой другой способ сделать это? Спасибо!

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

Вы не можете. Оконные ручки для каждого процесса.

Кроме того, ты бы не хотел. Достаточно проблематично иметь родительское окно в другом потоке - что приводит к тому, что очереди сообщений двух потоков присоединяются, то есть с тех пор они эффективно совместно используют одну и ту же очередь сообщений. Так что теперь, если либо поток блокируется, либо выполняет длительную обработку, оба потока останавливаются. (Насколько я знаю, позже невозможно отсоединить очереди сообщений.) Представьте себе, что вы пытаетесь расширить этот перекрестный процесс.

Если вам нужно запустить какой-то новый код и использовать существующее окно в качестве родительского, вы не можете использовать перекрестный процесс. Вам нужно будет загрузить код WPF в ваш процесс и вызвать в нем метод, передав в качестве параметра родительское окно. Самый простой способ загрузить этот код в ваш процесс - это изменить приложение WPF на библиотеку классов (.dll) и либо добавить ссылку на этот .dll, либо загрузить ее динамически с помощью Reflection.

0 голосов
/ 05 октября 2011

Как @Joe White сказал, что вы не можете достичь этого сразу ... Я думаю, что я могу "догадаться", что вы получаете ....

Возможно, у вас есть родительский файл WinForm MDI (его exe-файл), и вы хотите запустить другое окно WPF (другой exe-файл) в качестве его дочернего элемента. Я прав?

Хмммм, тогда вам нужно будет создать новое WinForm дочернее окно с WinFormWPFHostApp в нем, а затем передать сборки WPF в этот проект и попытаться разместить Content MainWindow из этого другого приложения WPF. .

см. эту статью ...

...