En réponse à votre commentaire, il y a plusieurs façons d'atteindre ce que vous essayez de faire.
Une façon est d'enregistrer le moment où l'action se produit la première fois (ce qui peut être réalisé en utilisant DateTime.Now
). Ensuite, si des actions ultérieures se produisent dans la seconde de la durée enregistrée, retournez immédiatement. Exemple:
DateTime lastActionTime = DateTime.Now;
// ...
if ((DateTime.Now - lastActionTime).Milliseconds < 1000)
{
// Too soon to execute the action again
return;
}
// Do whatever the action does...
Une autre façon de faire, dans le cas où vous souhaitez désactiver un bouton pendant une seconde, est d'utiliser un Timer
(il y a plusieurs minuteurs dans le .NET Framework, j'utilise le Winforms version ici). Une fois l'action effectuée, vous désactivez le bouton ou un autre élément de l'interface utilisateur, puis démarrez un Timer
, avec un intervalle d'une seconde. Une fois la minuterie désactivée, vous pouvez réactiver l'élément d'interface utilisateur, ce qui permet à l'utilisateur d'exécuter à nouveau l'action. Exemple:
// In a constructor or something
timer = new System.Windows.Forms.Timer();
timer.Interval = 1000; // 1000 milliseconds
timer.Tick += (s, e) =>
{
button.Enabled = true;
timer.Stop();
};
// ...
void OnButtonClick()
{
button.Enable = false;
timer.Start();
// Do whatever the button does...
}
Ce dernier est ce que vous utilisez dans une interface graphique, l'ancien pourrait être utilisé dans quelque chose comme un jeu.
Ce code suggère de sérieuses failles de conception dans votre projet, vous devriez reconsidérer la nécessité de dormir arbitrairement pour 1000. Qu'est-ce que vous voulez faire? – Arafangion
C'est vraiment la méthode la plus simple pour retarder (et seulement l'approche générale pour retarder * de manière synchrone *). Cependant, comme vu, cela * bloque * le thread actuel. Sinon, envisagez de passer à un modèle * asynchrone * (par exemple, Temporisateur et rappels). –
Pouvez-vous expliquer pourquoi vous voulez retarder comme ça? Ça sens le poisson. – JohnFx