我有一个方法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()
方法?非常感谢任何帮助。
提前致谢。
答案 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!");
}
}