ฉันเป็นวัตถุจับเวลา ฉันต้องการให้มันทำงานทุกนาที โดยเฉพาะอย่างยิ่งควรเรียกใช้OnCallBackวิธีการและไม่ได้ใช้งานในขณะที่OnCallBackวิธีการทำงาน เมื่อOnCallBackวิธีการเสร็จสิ้น (a OnCallBack) จะเริ่มการจับเวลาใหม่
นี่คือสิ่งที่ฉันมีในตอนนี้:
private static Timer timer;
private static void Main()
{
timer = new Timer(_ => OnCallBack(), null, 0, 1000 * 10); //every 10 seconds
Console.ReadLine();
}
private static void OnCallBack()
{
timer.Change(Timeout.Infinite, Timeout.Infinite); //stops the timer
Thread.Sleep(3000); //doing some long operation
timer.Change(0, 1000 * 10); //restarts the timer
}
อย่างไรก็ตามดูเหมือนว่าจะไม่ทำงาน มันทำงานเร็วมากทุกๆ 3 วินาที แม้ว่าจะเพิ่มระยะเวลา (1,000 * 10) ดูเหมือนว่ามันจะเมิน1000 * 10
ฉันทำอะไรผิด?
Timer.Change: "ถ้า dueTime เป็นศูนย์ (0) วิธีการโทรกลับจะถูกเรียกใช้ทันที" ดูเหมือนว่าจะเป็นศูนย์สำหรับฉัน