当前位置: 首页 > news >正文

System.InvalidOperationException:“寄宿的 HWND 必须是指定父级的子窗口。”

当试图在 WPF 窗口中嵌套显示 Win32 子窗口的时候,你有可能出现错误:“寄宿的 HWND 必须是指定父级的子窗口。”。

这是很典型的 Win32 错误,本文介绍如何修复此错误。


本文内容

    • 问题
    • 原因和解决办法

我们在 MainWindow 中嵌入一个其他的窗口来承载新的 WPF 控件。一般情况下我们当然不会这么去做,但是如果我们要跨越进程边界来完成 WPF 渲染内容的融合的时候,就需要嵌入一个新的窗口了。

WPF 中可以使用 HwndSource 来包装一个 WPF 控件到 Win32 窗口,使用自定义的继承自 HwndHost 的类可以把 Win32 窗口包装成 WPF 控件。由于窗口句柄是可以跨越进程边界传递的,所以这样的方式可以完成跨进程的 WPF 控件显示。

问题

你有可能在调试嵌入窗口代码的时候遇到错误:

错误

System.InvalidOperationException:“寄宿的 HWND 必须是指定父级的子窗口。”

英文是:

Hosted HWND must be a child window of the specified parent.

原因和解决办法

出现此错误,是因为同一个子窗口被两次设置为同一个窗口的子窗口。

具体来说,就是 A 窗口使用 HwndHost 设置成了 B 的子窗口,随后 A 又通过一个新的 HwndHost 设置成了新子窗口。

要解决,则必须确保一个窗口只能使用 HwndHost 设置一次子窗口。


我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • 在使用 .NET Remoting 技术开发跨进程通信时可能遇到的各种异常
  • 使用 SetParent 跨进程设置父子窗口时的一些问题(小心卡死)
  • System.ComponentModel.Win32Exception (0x80004005): 无效的窗口句柄。
  • 解决 WPF 嵌套的子窗口在改变窗口大小的时候闪烁的问题
  • WPF 的 Application.Current.Dispatcher 中,为什么 Current 可能为 null
  • WPF 的 Application.Current.Dispatcher 中,Dispatcher 属性一定不会为 null
  • 提高使用 Visual Studio 开发效率的键盘快捷键
  • WPF 不要给 Window 类设置变换矩阵(分析篇):System.InvalidOperationException: 转换不可逆。
  • WPF 不要给 Window 类设置变换矩阵(应用篇)
  • git fetch 失败,因为 unable to resolve reference 'refs/remotes/origin/xxx': reference broken
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • 发现电脑屏幕总是不自动关闭?看看你是否打开了这些程序……
  • 临时编写和调试 C++ 代码?用 VSCode 就够了!一分钟搭好 C++ 调试环境
  • WPF 制作高性能的透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True)
  • 在 WPF 中获取一个依赖对象的所有依赖项属性
  • ----------
  • Android组件 - 收藏集 - 掘金
  • Apache Zeppelin在Apache Trafodion上的可视化
  • ECS应用管理最佳实践
  • go append函数以及写入
  • Go 语言编译器的 //go: 详解
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • js算法-归并排序(merge_sort)
  • Laravel核心解读--Facades
  • linux学习笔记
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Node 版本管理
  • python大佬养成计划----difflib模块
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Spring Boot MyBatis配置多种数据库
  • spring cloud gateway 源码解析(4)跨域问题处理
  • sublime配置文件
  • 记一次用 NodeJs 实现模拟登录的思路
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (WSI分类)WSI分类文献小综述 2024
  • (ZT)一个美国文科博士的YardLife
  • (力扣)1314.矩阵区域和
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)程序员技术练级攻略
  • .gitignore文件_Git:.gitignore
  • .Net 4.0并行库实用性演练
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net mvc 获取url中controller和action
  • .NET 中创建支持集合初始化器的类型
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .netcore如何运行环境安装到Linux服务器
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @EnableAsync和@Async开始异步任务支持