2010-01-24 5 views
1

J'ai un cas où je reçois beaucoup de demandes de sockets entrant. Je voudrais mettre à jour l'interface utilisateur 3 secondes après la dernière demande de socket est entré. Par exemple, si demande de socket arrive et le précédent était il y a seulement 2 secondes il devrait effacer la mise à jour de l'interface utilisateur et commencer à attendre 3 secondes.Threading UI Update (pas la question invoke requis)

Remarques: Chaque demande de socket se présente sur un thread différent.

Répondre

0

Utilisez un System.Timers.Timer. Chaque fois qu'une demande arrive, vous réinitialisez la minuterie pendant 3 secondes. Lorsque la minuterie s'éteint, mettez à jour l'interface utilisateur. La minuterie doit être accessible par chaque fil de sorte que vous aurez besoin de le protéger avec un mutex.

1

Vous pouvez mettre à jour l'interface utilisateur dans un System.Timers.Timer (définissez la propriété SynchronizingObject du temporisateur sur votre formulaire) avec un intervalle de trois secondes et réinitialisez-la chaque fois que vous recevez une demande.

EDIT: Sur la pensée plus, vous devez utiliser un System.Threading.Timer, ce qui est moins pratique alors Timers.Timer mais il est plus léger, et est complètement thread-safe. Dans son rappel, vous devrez appeler le form.BeginInvoke pour passer au thread d'interface utilisateur.

Chaque fois que vous recevez une demande, vous devez exécuter timer.Change(3000, -1).