添加或删除平板电脑设备后,WPF应用程序停止对触摸的响应

时间:2018-08-15 07:31:50

标签: c# .net wpf windows .net-4.6.2

在当前CPU使用率较高的计算机上运行任何WPF应用程序,如果您同时保持插拔USB HID平板电脑设备的性能,则WPF应用程序将停止响应触摸,而仅响应鼠标。 / p>

要求:

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

我的问题:

非Microsoft开发人员是否可以为我们提供彻底的方法来解决此触摸故障?


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

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

  • 下面发布的GetPenEventMultiple可能会陷入僵局。
  • GetTabletInfoHelper可能还有其他线程安全问题。

下面的代码来自.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.

1 个答案:

答案 0 :(得分:1)

如果反复连接和断开硬件设备,则操作系统最终将因资源使用而崩溃,陷入瘫痪或损坏内存。

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

否则,您会收到一些USB电缆损坏的用户,反复连接和断开平板电脑。

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