0

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

4

2 回答 2

2

你不能。窗口句柄是每个进程的。

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

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

于 2011-10-05T12:06:50.950 回答
0

正如@Joe White 所说,您无法立即实现这一目标……我想我可以“猜出”您的意思……

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

嗯,那么您将不得不在其中创建一个新的WinForm子窗口,WinFormWPFHostApp然后将 WPF 程序集引用到该项目并尝试托管来自该其他 WPF 应用程序Content的程序集。MainWindow

参考这篇文章...

于 2011-10-05T12:11:34.610 回答