启动WPF可执行文件并设置父级?

时间:2011-10-05 11:48:20

标签: wpf executable setparent

我有一个WPF可执行文件,我希望另一个程序启动它并将此启动程序设置为我的WPF可执行文件的父窗口(主要目的是当启动程序关闭时,WPF可执行文件也会关闭)。我想我可以这样做:我将Hwnd作为一个命令行参数传递(作为整数字符串),我可以调用SetParent或我的WPF可执行代码中的任何函数来指定父级。但是,我无法使其发挥作用。任何人都可以告诉我如何做到这一点,或任何其他方式来做到这一点?谢谢!

2 个答案:

答案 0 :(得分:2)

你做不到。窗口句柄是按进程进行的。

此外,你不会想要。在另一个线程中有一个父窗口就足够了 - 导致两个线程的消息队列连接起来,即它们从那时起有效地共享同一个消息队列。所以现在如果要么线程锁定,要么进行一些冗长的处理,两个线程都会被冻结。 (据我所知,没有办法在以后分离消息队列。)想象一下,试图扩展这个跨进程。

如果您必须启动一些新代码并将现有窗口用作父级,则无法进行跨进程处理。您必须将WPF代码加载到您的进程中并调用其中的方法,并将父窗口作为参数传递。将代码加载到进程中的最简单方法是将WPF应用程序更改为类库(.dll),并添加对该.dll的引用,或使用Reflection动态加载它。

答案 1 :(得分:0)

正如@Joe White所说,你无法实现这一点......我想我可以“猜测”你得到的......

您可能有一个WinForm MDI父级(已经是它的exe),并且您想要启动另一个WPF窗口(另一个exe)作为其子级。我是对的吗?

嗯,那么你必须在其中创建一个带有WinForm的新WinFormWPFHostApp子窗口,然后将WPF程序集引用到这个项目并尝试托管Content MainWindow 1}}来自其他WPF应用程序。

参考this文章......