托管WPF插件跨进程问题

本文关键字:进程 问题 插件 WPF 托管 | 更新日期: 2023-09-27 18:17:19

我使用类似http://www.codeproject.com/Articles/516431/Baktun-Shell-Hosting-WPF-Child-Windows-in-Another的方法通过AddInHost(从HwndHost派生)类在另一个进程中托管WPF应用程序(插件)。

只要我不挂起子进程,就可以正常工作。如果我这样做,那么父进程也会被冻结。这样做的原因是父/子进程共享相同的(同步)输入队列:好或坏-不同进程之间的SetParent() win32 API

在我用SetParent Win32函数暂停插件进程之前,我已经尝试解耦这两个进程,但即使插件从主机应用程序解耦,它也无助于摆脱问题:

public static void Decouple(HwndHost hwndHost)
{
  SetParent(hwndHost.Handle, IntPtr.Zero);
}

是否知道我在这里缺少什么来分离两个进程,以便它们不再共享相同的输入队列?

托管WPF插件跨进程问题

对我来说,解决方案是使用AttachThreadInput Win32 API函数来分离插件HwndHost输入队列