Приложения WPF перестают реагировать на прикосновения после добавления или удаления планшетных устройств

Запустите любое приложение WPF на компьютере, который в настоящее время сильно загружен ЦП. Если вы продолжаете подключать и отключать планшетное устройство USB HID одновременно, приложения WPF перестают реагировать на прикосновения и реагируют только на мышь.

Требования:

  1. Запустите любое приложение WPF
  2. Продолжайте подключать и отключать планшетное устройство USB HID
  3. Сделайте высокую загрузку процессора

Мой вопрос:

Есть ли какой-нибудь тщательный способ для нас, не являющихся разработчиками Microsoft, исправить эту ошибку касания?


Я разместил предварительный анализ сенсорного сбоя здесь:

Эта статья немного длинна для Stackru, поэтому здесь я приведу лишь некоторые выводы:

  • Там может быть тупик для 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.

0 ответов

Ваша операционная система в конечном итоге выйдет из строя, зависнет из-за использования ресурсов или иным образом повредит память, если аппаратное устройство будет неоднократно подключаться и отключаться.

Предлагаем вам изменить настольное приложение WPF так, чтобы оно ничего не делало, пока пользователь не подключит планшет и не нажмет кнопку в настольном приложении WPF для поддержки "Включить планшет".

В противном случае вы столкнетесь с тем, что пользователь с неисправным кабелем USB будет постоянно подключать и отключать планшет.

ОС не сможет обрабатывать устройство так же, как если бы это был неисправный контроллер диска.

Другие вопросы по тегам