C#中基于时间的方法执行

时间:2011-07-09 13:13:26

标签: c# datetime methods timer

我有一个方法send(),我希望每1秒执行一次。我很难实现这一点。到目前为止,这是我在主程序中提出的内容:

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
}

所以基本上我尝试在当前时间的每一秒都调用我的send()方法,我跳过奇数秒,这是我尝试实现它的方式RandomSec()isEven()方法:

    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;
    }

现在的问题是当我在我的程序中运行while循环时,我的send()方法在1秒内发送大量字符串,然后暂停1秒,然后在当前发送另一大串消息第二是甚至。如何让我的程序每1秒仅执行一次send()方法,这样send()方法每隔一秒只发送一个字符串而不是20/30。我是否可以在时间控制的循环中调用我的send()方法?非常感谢任何帮助。

提前致谢。

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

发送一个字符串,等待/休眠一秒钟(或两个)然后发送下一个字符串要容易得多。

每秒多次轮询时间会导致您遇到的效果

答案 2 :(得分:1)

您可以使用Timer class

上述链接中的示例代码:

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!");
     }
 }