web-dev-qa-db-fra.com

Les applications WPF cessent de répondre aux contacts après l'ajout ou la suppression de tablettes

Exécutez n'importe quelle application WPF sur un ordinateur dont l'utilisation du processeur est actuellement élevée.Si vous continuez de brancher et de débrancher une tablette USB HID en même temps, les applications WPF cesseront de répondre aux touches et ne répondront qu'à la souris.

Les exigences:

  1. Exécutez n'importe quelle application WPF
  2. Continuez à brancher et à débrancher une tablette USB HID
  3. Faire une utilisation élevée du CPU

Ma question:

Existe-t-il un moyen complet pour nous, les développeurs non Microsoft, de corriger cette défaillance tactile?


J'ai posté l'analyse préliminaire de l'échec tactile ici:

Cet article est un peu long pour StackOverflow, donc je ne mentionne qu'une conclusion ici:

  • Il peut y avoir un blocage pour GetPenEventMultiple publié ci-dessous.
  • Il peut y avoir d'autres problèmes de sécurité des threads de GetTabletInfoHelper.

Le code ci-dessous provient de .NET Framework et je les ai simplifiés pour une meilleure compréhension:

// 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.
35
walterlv

Votre système d'exploitation se bloquera finalement, s'embourbera en raison de l'utilisation des ressources ou corrompra la mémoire si le périphérique matériel est connecté et déconnecté à plusieurs reprises.

Nous vous suggérons de modifier l'application de bureau WPF pour ne rien faire jusqu'à ce que l'utilisateur connecte la tablette et clique sur un bouton dans l'application de bureau WPF pour prendre en charge "Activer la tablette".

Sinon, vous obtiendrez un utilisateur avec un mauvais câble USB connectant et déconnectant à plusieurs reprises la tablette.

Le système d'exploitation ne pourra pas gérer l'appareil de la même manière que s'il s'agit d'un contrôleur de disque défectueux.

1
JohnT