Приложения WPF перестают реагировать на прикосновения после добавления или удаления планшетных устройств
Запустите любое приложение WPF на компьютере, который в настоящее время сильно загружен ЦП. Если вы продолжаете подключать и отключать планшетное устройство USB HID одновременно, приложения WPF перестают реагировать на прикосновения и реагируют только на мышь.
Требования:
- Запустите любое приложение WPF
- Продолжайте подключать и отключать планшетное устройство USB HID
- Сделайте высокую загрузку процессора
Мой вопрос:
Есть ли какой-нибудь тщательный способ для нас, не являющихся разработчиками 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 будет постоянно подключать и отключать планшет.
ОС не сможет обрабатывать устройство так же, как если бы это был неисправный контроллер диска.