我试图通过使用计时器来延迟我的方法:
private System.Timers.Timer _delayTimer;
private void delay()
{
_delayTimer = new System.Timers.Timer();
_delayTimer.Interval = 5000;
//_delayTimer.Enabled = true;
_delayTimer.Elapsed += _delayTimer_Elapsed;
_delayTimer.Start();
someMethod();
}
}
private void _delayTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
// delay for 5 seconds
}
Run Code Online (Sandbox Code Playgroud)
当我进入delay()方法我想开始计时,比我想的延时5秒,之后才是我想要执行someMethod(),目前这不会发生,执行后delay()的someMethod()无延时5秒执行
Jon*_*Jon 11
您当前的代码设置计时器,然后立即执行someMethod.而不是这个,你需要将实际的方法调用放在你的Elapsed处理程序中:
private void delay()
{
_delayTimer = new System.Timers.Timer();
_delayTimer.Interval = 5000;
//_delayTimer.Enabled = true;
_delayTimer.Elapsed += _delayTimer_Elapsed;
_delayTimer.Start();
}
}
private void _delayTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
someMethod();
}
Run Code Online (Sandbox Code Playgroud)
如果没有其他任何你打算做的事情,你可以简单地写这个内联:
_delayTimer = new System.Timers.Timer();
_delayTimer.Interval = 5000;
_delayTimer.Elapsed += (o, e) => someMethod();
_delayTimer.Start();
Run Code Online (Sandbox Code Playgroud)
如果您使用 .Net4.5(或使用 BCL.Async 包),您可以使用 Task.Delay
private async void delay()
{
await Task.Delay(5000);
someMethod();
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 .Net4.5
试试下面的代码。我会建议你使用System.Threading.Timer
var timer = new System.Threading.Timer(x => someMethod(), null, 5000, System.Threading.Timeout.Infinite);\
Run Code Online (Sandbox Code Playgroud)
不要忘记当您使用 Threading.Timer 时someMethod将在ThreadPool线程中调用,如果您正在访问 UI,则需要将调用编组到 UI 线程。
如果您希望当前线程暂停五秒钟,则调用Thread.Sleep. 例如:
Thread.Sleep(TimeSpan.FromSeconds(5));
DoSomething();
Run Code Online (Sandbox Code Playgroud)
如果您希望从现在起五秒钟后发生某事,而您正在做其他事情,请使用计时器。当计时器结束时,该操作将在线程池线程上执行。
此外,如果您只想让计时器执行一次(而不是每五秒一次),请务必将AutoReset设置为false。
| 归档时间: |
|
| 查看次数: |
38454 次 |
| 最近记录: |