2009-08-21 4 views
1

J'écris une application pour un POS et en utilisant POS pour .NET. J'ai découvert que lorsque j'appelle la méthode WaitForDrawerClose, alors que l'application reste bloquée et attend que le tiroir soit fermé (comme souhaité), tous les clics semblent s'empiler dans la file d'attente et tous se déclenchent une fois le tiroir fermé. Comment puis-je empêcher mon application d'écouter ces événements tant que WaitForDrawerClose n'est pas encore revenu? Merci!Les événements s'accumulent pendant CashDrawer.WaitForDrawerClose

Répondre

4

Vous pouvez éviter d'appeler WaitForDrawerClose entièrement et gérer vous-même la logique.

Il suffit d'écouter l'événement OnDrawerStateChanged pour savoir quand le tiroir est fermé. Au lieu de bloquer de manière synchrone à ce moment-là (ce qui cause votre problème), vous pouvez simplement quitter votre routine, mettre à jour votre interface utilisateur (désactiver les boutons pour empêcher les événements, etc.), puis réactiver . C'est un peu plus d'effort, car c'est plus de travail qu'une méthode d'une ligne, mais cela vous donne BEAUCOUP plus de contrôle sur la façon dont votre application va réagir si l'utilisateur ne fait pas ce qu'il est censé faire. Vous pourriez même avoir des écrans de harcèlement qui indiquent à l'utilisateur (après un certain délai) qu'ils doivent fermer le tiroir, faire plus que le bip standard, etc.

+0

Merci pour votre réponse, Reed. Je pense que cela a du sens, mais il est vrai que cela se faufile dans un territoire que je ne connais pas, et je ne suis pas sûr de la façon dont j'aurai accès à cet événement. J'ai actuellement une instance d'un objet CashDrawer, mais je ne peux pas l'obtenir car il est protégé (non?). – Blumer

+0

Si ce n'est pas celui que vous implémentez, vous devrez probablement essayer de traiter vos fonctions CashDrawer sur un thread séparé, pour la même raison. La gestion de WaitForDrawerClose sur votre thread d'interface utilisateur est à l'origine de la mise en file d'attente des événements. –

+0

Yup, c'est ce que j'ai découvert peu de temps après - que depuis que WaitForDrawerClose était appelé à l'intérieur de la manipulation du clic sur le bouton qui provoquait l'ouverture du tiroir, le traitement de l'événement n'était jamais terminé. Merci de votre aide. – Blumer

Questions connexes