首页 > 解决方案 > WPF 应用程序在添加或删除平板设备后停止响应触摸

问题描述

在当前 CPU 使用率较高的计算机上运行任何 WPF 应用程序,如果您同时插入和拔出 USB HID 平板设备,WPF 应用程序将停止响应触摸,仅响应鼠标。

要求:

  1. 运行任何WPF 应用程序
  2. 继续插拔 USB HID 平板设备
  3. 使CPU使用率高

我的问题:

我们非微软开发人员有什么彻底的方法来解决这个触摸失败吗?


我在这里发布了对触摸失败的初步分析:

这篇文章对于 StackOverflow 来说有点长,这里只提一些结论:

下面的代码来自 .NET Framework,为了便于理解,我对其进行了简化:

// PenThreadWorker.ThreadProc
while(There are two loops in real)
{
    // The `break` below only exit one loop, not two.
    if (this._handles.Length == 1)
    {
        if (!GetPenEvent(this._handles[0], otherArgs))
        {
            break;
        }
    }
    else if (!GetPenEventMultiple(this._handles, otherArgs))
    {
        break;
    }
    // Other logics.
}


// WorkerOperationGetTabletsInfo.OnDoWork
try
{
    _tabletDeviceInfo = PenThreadWorker.GetTabletInfoHelper(pimcTablet);
}
catch(COMException)
{
    _tabletDevicesInfo = new TabletDeviceInfo[0];
}
catch(ArgumentException)
{
    _tabletDevicesInfo = new TabletDeviceInfo[0];
}
// Other exception handling.

标签: c#.netwpfwindows.net-4.6.2

解决方案


如果硬件设备反复连接和断开连接,您的操作系统最终会因资源使用而崩溃、陷入困境或以其他方式损坏内存。

建议您将 WPF 桌面应用程序更改为不执行任何操作,直到用户连接平板电脑并单击 WPF 桌面应用程序中的按钮以“启用平板电脑”支持。

否则,您将让一些用户使用坏的 USB 电缆反复连接和断开平板电脑。

操作系统将无法像处理故障磁盘控制器一样处理设备。


推荐阅读