2011-07-09 4 views
0

J'ai une méthode send() que je souhaite exécuter/appeler toutes les secondes. J'ai de la difficulté à l'appliquer. Jusqu'à présent, ce que je suis venu dans mon programme principal:Exécution de la méthode basée sur le temps en C#

bool done = false; 
while (!done) 
{ 
    string vCurrent = RandomVoltage(220, 240) + "" + RandomCurrent(10, 13); 
    int seconds = RandomSec(); 
    if (isEven(seconds)) 
    send(vCurrent, "169.254.156.135");//send the string to the ip address 
} 

Donc, fondamentalement, j'essaie appeler ma méthode send() pour chaque seconde du temps courant qui est encore, et je saute les secondes impaires, est ici comment je essayé à mettre en œuvre que mes RandomSec() et isEven() méthodes:

private static readonly object syncLock = new object(); 
    public static int RandomSec() 
    { 
     lock (syncLock) 
     { 
      return DateTime.Now.Second; 
     } 
    } 

    public static bool isEven(int sec) 
    { 
     if ((sec % 2) == 0) 
      return true; 
     else return false; 
    } 

maintenant, le problème est quand je lance la boucle while dans mon programme, ma méthode send() envoie un grand groupe de cordes en 1 seconde, puis fait une pause pendant 1 seconde puis envoie un autre gros chignon ch de messages lorsque la seconde en cours est encore une fois. Comment puis-je obtenir mon programme pour exécuter ma méthode send() seulement une fois toutes les secondes, de sorte que la méthode send() envoie seulement 1 chaîne chaque seconde paire plutôt que disons 20/30 d'entre eux. Est-il possible pour moi d'appeler ma méthode send() dans une boucle à temps contrôlé? Toute aide est grandement appréciée.

Merci d'avance.

Répondre

1

Vous pouvez utiliser le Timer class.

Exemple de code à partir du lien ci-dessus:

public class Timer1 
{ 

    public static void Main() 
    { 
     System.Timers.Timer aTimer = new System.Timers.Timer(); 
     aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent); 
     // Set the Interval to 5 seconds. 
     aTimer.Interval=5000; 
     aTimer.Enabled=true; 

     Console.WriteLine("Press \'q\' to quit the sample."); 
     while(Console.Read()!='q'); 
    } 

    // Specify what you want to happen when the Elapsed event is raised. 
    private static void OnTimedEvent(object source, ElapsedEventArgs e) 
    { 
     Console.WriteLine("Hello World!"); 
    } 
} 
+0

Merci pour le tout le monde de réponses, ne peut pas croire à quel point j'ai raté. Désolé je suis nouveau à ce genre de choses. Merci encore. –

1

Il est beaucoup plus facile d'envoyer une chaîne, attendez/sommeil pour une seconde (ou deux), puis envoyer la suivante.

relève du temps, plusieurs fois par seconde, provoque l'effet que vous rencontrez

Questions connexes