Question

Pour mon application WPF j'ai développé un clavier virtuel. Il fonctionne très bien sur ma machine de développement. Cependant, sur des machines plus lentes la réponse de clic du bouton est lent. Une fois le bouton cliqué, il y a un délai avant que les mises à jour d'affichage avec le bouton vers le bas état et l'événement boutons. Que puis-je faire pour supprimer ce délai? Le problème est un problème d'affichage WPF?

Pensant qu'il a été le gestionnaire d'événements qui était lent, je l'ai essayé plusieurs approches d'envoyer une touche du clavier de l'événement pressé. Peu importe ce que j'ai essayé, l'interaction est encore lent. Actuellement, je suis en utilisant:

SendInput(uint nInputs, ref INPUT pInputs, int cbSize);

Importé de user32.dll. Mon gestionnaire d'événements est simplifiée au point où il crée uniquement les paramètres et appeler la fonction ci-dessus.

J'ai aussi essayé d'utiliser ce qui suit, mais ne pas de meilleures performances:

 System.Windows.Input.Keyboard.FocusedElement.RaiseEvent(...)

Comment puis-je me débarrasser du retard?

Était-ce utile?

La solution

Pouvez-vous dire ce qui est la cause de votre retard?

S'il y a quelque chose de lent dans votre événement Click, vous pouvez soit utiliser un Thread séparé pour exécuter le code. Dans le nouveau fil, si vous avez du code qui doit être exécuté sur l'interface utilisateur de cette discussion, utilisez Dispatcher.BeginInvoke de faire la queue vers le haut à exécuter lorsque l'interface utilisateur a le temps de traitement. Pour garder l'interface utilisateur réactive, vous devez garder un code lourd hors du thread principal (UI).

Si votre clavier virtuel est local à un certain Window, en fonction de la complexité de ce que vous faites, vous pouvez prendre va maintenant être rendu dans le logiciel, et peuvent avoir des problèmes de performances lourdes. passé, vous pouvez jeter un oeil à cet article Microsoft sur Optimisation application Performance WPF pour quelques conseils généraux pourrait accélérer votre traitement.

Je conseille à tous ceux en développement XAML lire ce dernier article. La différence de performance entre ces petits détails tels que l'utilisation TextBlock contre Label, ou la mise en œuvre de DependencyProperty vs de INotifyPropertyChanged, peut vraiment ajouter, et le fait qu'ils ne l'analyse comparative contre chacun montre vraiment l'importance de la bonne conception.

Autres conseils

Juste couru à travers cette discussion. J'ai une application WinForms où la réponse du bouton était lent. Ce qui est arrivé après avoir mis à jour à 64 bits de Windows 7. Je trouve que si je changeais mon objectif de projet « x86 » (au lieu de « Any CPU »), la réponse du bouton lent est parti.

Si votre gestionnaire d'événements prend beaucoup de temps pour terminer, il se verrouille l'interface utilisateur pour ce moment-là. Essaye ça gestionnaire d'événement:

  private void button1_Click(object sender, RoutedEventArgs e)
  {
     System.Threading.Thread.Sleep(5000);
  }

Votre gestionnaire d'événements probablement se termine plus vite sur une machine plus rapide. Pour les opérations lentes, vous voudrez peut-être pousser le travail à un autre fil.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top