我用这个方法来调用另一个方法每60秒:执行的方法只有
Timer updateTimer = new Timer(testt, null,
new TimeSpan(0, 0, 0, 0, 1), new TimeSpan(0, 0, 60));
是可能的1毫秒的延迟之后只有一次调用此方法?
我用这个方法来调用另一个方法每60秒:执行的方法只有
Timer updateTimer = new Timer(testt, null,
new TimeSpan(0, 0, 0, 0, 1), new TimeSpan(0, 0, 60));
是可能的1毫秒的延迟之后只有一次调用此方法?
假设这是一个System.Threading.Timer
,从为constructor的最后一个参数的文件:
period
The time interval between invocations of the methods referenced by callback. Specify negative one (-1) milliseconds to disable periodic signaling.
所以:
Timer updateTimer = new Timer(testt, null,
TimeSpan.FromMilliseconds(1), // Delay by 1ms
TimeSpan.FromMilliseconds(-1)); // Never repeat
是真正有用的,虽然1毫秒的延迟?为什么不立即执行它?如果你真的只是试图在线程池线程上执行它,那么有更好的方法来实现它。
错误:跨线程操作无效:从其创建线程以外的线程访问控件'label8'。 - 当试图在窗体上显示某些内容时。 – TomeeNS 2015-08-10 21:48:12
@TomeeNS:我怀疑你正在使用那种错误的Timer。 – 2015-08-10 21:48:51
System.Timers.Timer aTimer = new System.Timers.Timer(10000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Set the Interval to 60 seconds (60000 milliseconds).
aTimer.Interval = 60000;
//for enabling for disabling the timer.
aTimer.Enabled = true;
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
//disable the timer
aTimer.Enabled = false;
Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
}
您总是可以将第二个TimeSpan设置为null。不是一个理想的解决方案,但它会工作。 – ChrisF 2013-03-03 12:30:50
您可以使用发件人对象在被调用的方法上停止计时器 – Tearsdontfalls 2013-03-03 12:32:04