9
votes

C # Minuterie (ralentissement d'une boucle)

Je voudrais ralentir une boucle de sorte qu'il bouge toutes les 5 secondes.

dans ActionScript , j'utiliserais une minuterie et un événement complet de la minuterie pour le faire. Comment irai-je à ce sujet en C #?


0 commentaires

4 Réponses :


17
votes

Vous pouvez ajouter cet appel à l'intérieur de votre boucle: xxx

ou préférable pour une meilleure lisibilité: xxx

Toutefois, si votre application a Une interface utilisateur que vous ne devez jamais dormir sur le fil de premier plan (le fil qui traite la boucle de message d'application).


2 commentaires

Ce code attendra 5 secondes entre chaque itération, pas le feu chacun de 5 secondes. Si le code que vous effectuez dans votre boucle prend beaucoup de temps, comme une demande Web, le total sera supérieur à 5 secondes. La solution avec une minuterie d'Adopilot est plus précise de votre question, mais toute solution peut convenir à vos besoins.


Pour la lisibilité, la fonction de sommeil peut également prendre une tranche de temps comme argument. Système.threading.thread.sleep (tispan.fromseconds (5));



11
votes

Vous pouvez essayer d'utiliser la minuterie,

 _timer.Enabled = true;


0 commentaires

4
votes

Ne pas utiliser de boucle du tout. Configurez un objet TIMER et réagissez à son événement tiré. Faites attention, car ces événements tireront sur un thread différent (le fil de la minuterie de la threadpool).


0 commentaires

1
votes

Disons que vous avez un pour code> -Loop que vous souhaitez utiliser pour écrire dans une base de données chaque seconde. Je créerais ensuite une minuterie définie sur un intervalle de 1000 ms, puis utilisez la minuterie de la même manière que vous utiliseriez un pendant code> -Loop si vous voulez qu'il agisse comme un pour code> -loop. En créant l'entier avant la boucle et en l'ajoutant à l'intérieur.

public patial class Form1 : From
{
    timer1.Start();
    int i = 0;
    int howeverLongYouWantTheLoopToLast = 10;

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (i < howeverLongYouWantTheLoopToLast)
        {
            writeQueryMethodThatIAssumeYouHave(APathMaybe, i); // <-- Just an example, write whatever you want to loop to do here.
            i++;
        }
        else
        {
            timer1.Stop();
            //Maybe add a little message here telling the user the write is done.
        }
    }
}


0 commentaires