WPF 已知问题 监听 WMI 事件导致触摸失效

news/2024/9/19 15:44:06/文章来源:https://www.cnblogs.com/lindexi/p/18407581

本文记录 WPF 的已知问题,在 .NET Core 版本的 WPF 应用里面,应用启动的过程监听 WMI 事件,将导致触摸模块 COM 接口获取失败,进而导致触摸失效

此问题仅在 .NET Core 版本复现,在 .NET Framework 框架下能正常工作

复现步骤如下:

  1. 安装 System.Management 库用于使用 WqlEventQuery 监听 WMI 变更
  2. 监听 TouchDown 事件输出断点信息

复现代码如下

    public MainWindow(){InitializeComponent();AppDomain.CurrentDomain.FirstChanceException += (sender, args) =>{Debug.WriteLine(args.Exception);};WqlEventQuery insertQuery =new WqlEventQuery("SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_USBHub'");ManagementEventWatcher insertWatcher = new ManagementEventWatcher(insertQuery);insertWatcher.Start(); // 如果注释掉这句话,那 TouchDown 事件将会被触发TouchDown += MainWindow_TouchDown;}private void MainWindow_TouchDown(object? sender, TouchEventArgs e){Debugger.Break(); // 不会被命中}

加上 insertWatcher.Start() 这句代码时,可以从 FirstChanceException 看到如下异常

System.InvalidCastException: 没有注册接口at MS.Win32.Penimc.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid)

此问题已经报告给 WPF 官方,请看 https://github.com/dotnet/wpf/issues/9752

本文代码放在 github 和 gitee 上,可以使用如下命令行拉取代码。我整个代码仓库比较庞大,使用以下命令行可以进行部分拉取,拉取速度比较快

先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 308096e0c8ede019f6dbe5bfe974ae1a12d7de42

以上使用的是国内的 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码,将 gitee 源换成 github 源进行拉取代码。如果依然拉取不到代码,可以发邮件向我要代码

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 308096e0c8ede019f6dbe5bfe974ae1a12d7de42

获取代码之后,进入 WPFDemo/YanerehaylemJeekalhebel 文件夹,即可获取到源代码

更多技术博客,请参阅 博客导航

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/795272.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读软件设计的要素07读后总结与感想兼导读

读后总结与感想兼导读1. 基本信息 软件设计的要素 丹尼尔杰克逊著 浙江教育出版社,2024年5月出版 1.1. 读薄率 书籍总字数236千字,笔记总字数18853字。 读薄率18853236000≈8% 1.2. 读厚方向构建可扩展分布式系统方法与实践设计模式:可复用面向对象软件的基础程序员修炼之道:…

C语言创建空白Windows窗口代码

C语言创建空白Windows窗口代码自用#include <windows.h> #include <stdio.h> #include <stdlib.h> //#include <imm.h>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPT…

南沙信奥老师解一本通题:1210:因子分解

​【题目描述】输入一个数,输出其素因子分解表达式。【输入】输入一个整数 n (2≤n<100)。【输出】输出该整数的因子分解表达式。 表达式中各个素数从小到大排列。 如果该整数可以分解出因子a的b次方,当b大于11时,写做 a^b ;当b等于1时,则直接写成a。【输入样例】 60 【…

Linux系统部署Jmeter环境

1.Linu安装Java环境 Jmeter是Java开发的,需要依赖JDK环境,因此我们需提前安装好JDK,安装地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html 先下载到windows系统,再将jar包传输到linux系统 2.windows系统安装MobaXterm 想要把windows系统的数据传…

Redis 入门 - 五大基础类型及其指令学习

学习Redis基础类型:字符串、集合、有序集合、列表、哈希,每种类型有各自的特点和常用指令。掌握这些基础是熟练使用Redis的关键。更多指令需自行尝试。经过前面Redis入门系列三篇文章学习,相信大家已经准备好学习新知识了,到这里也算是真正开始学习Redis了。学习了软件安装…

定时任务执行 php think 命令脚本

查看是否有该服务, 是否正常运行 1. 编写crontab 文件。 命令: crontab -e 如下图: php 是全局安装的, 使用php 执行项目目录下的think. 命令是自定义的命令, 然后把输出写到日志文件

zliabary最新入口,zliabary国内官网镜像站网址(持续更新)

​zliabary是全球最大的电子书网站,从2009年开始提供免费的电子书,到如今已经拥有1000万多本书籍和8000万篇文章,是最大的影子图书馆,由于美国政府的屏蔽,zliabary已经从24年5月退出了国内市场,zliabary官网国内暂时登录不了。国内目前有两种可以使用zliabary方法,第一种…

软工第二次作业

软工作业2:个人项目-论文查重 GitHub链接: github 课程信息课程: 计科22级2班 - 广东工业大学 作业要求: 作业要求 目标: 完成个人项目-论文查重;学会写单元测试一、PSP表格PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)Planning 计划 60 30Es…

Pyqt5 实现多标签页面

实现功能代码实现 import sysfrom PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QVBoxLayout, QPushButton, QWidget, QLabel, \QDesktopWidgetclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.ini_ui()def ini_ui(self):self.se…

gitee【下载文件】

1.配置公钥(如果是新设备) ssh-keygen -t ed25519 -C "Gitee SSH Key"输入这行命令,按3次回车,演示如下: 生成的公钥就在红框文件夹下复制该字符串,进入gitee的设置中,找到公钥粘贴该字符串配置完后可用该命令测试 ssh -T [git@gitee.com](mailto:git@gitee.c…

gitee【上传文件】

1.配置公钥 ssh-keygen -t ed25519 -C "Gitee SSH Key"输入这行命令,按3次回车,演示如下: 生成的公钥就在红框文件夹下复制该字符串,进入gitee的设置中,找到公钥粘贴该字符串配置完后可用该命令测试 ssh -T [git@gitee.com](mailto:git@gitee.com)2.新建仓库并配…