Supposons que vous ayez un bouton sur un formulaire qui compte jusqu'à 1000 dans une zone de texte, puis l'efface.Est-il possible d'éviter plusieurs clics sur un formulaire Winform?
Si je clique cinq fois rapidement sur le bouton (en cours d'exécution), le gestionnaire d'événements Click sera appelé 5 fois et je verrai le compte à cinq reprises.
Est-il possible de désactiver d'autres clics sur ce bouton alors que le premier clic compte?
Remarque: La désactivation du bouton dans la première instruction du gestionnaire de clic, puis sa réactivation à la fin ne fonctionne pas. De plus, le désabonnement/l'abonnement à l'événement click (le - = suivi de + =) ne fonctionne pas.
Voici un échantillon pour illustrer:
private bool runningExclusiveProcess = false;
private void button1_Click(object sender, EventArgs e)
{
this.button1.Click -= new System.EventHandler(this.button1_Click);
if (!runningExclusiveProcess)
{
runningExclusiveProcess = true;
button1.Enabled = false;
textBox1.Clear();
for (int i = 0; i < 1000; i++)
{
textBox1.AppendText(i + Environment.NewLine);
}
runningExclusiveProcess = false;
button1.Enabled = true;
}
this.button1.Click += new System.EventHandler(this.button1_Click);
}
Vous effectuez tout le travail sur le thread de l'interface utilisateur. Il atteindra toujours la fin de cette méthode avant de vous permettre de cliquer à nouveau sur le bouton. Le code prend probablement beaucoup moins de temps à courir que vous ne le pensez. – xyz
Compter jusqu'à 1000 n'est pas le délai qu'il était. Votre ordinateur compte jusqu'à 1000 entre les clics. (Quelques Sleep() ou d'autres appels de fonction plus longs afficheraient le comportement que vous attendez) –
@tzup Vous avez raison sur les clics mis en file d'attente même si le thread de l'interface utilisateur est bloqué. Je ne le savais pas. Va supprimer ma réponse :) – xyz