【问题标题】:Execute a method after delay on time only仅在延迟时间后执行方法
【发布时间】:2013-03-03 12:28:59
【问题描述】:

我正在使用此方法每 60 秒调用另一个方法:

Timer updateTimer = new Timer(testt, null, 
                              new TimeSpan(0, 0, 0, 0, 1), new TimeSpan(0, 0, 60));

延迟1毫秒后是否可以只调用一次该方法?

【问题讨论】:

  • 您始终可以将第二个 TimeSpan 设置为 null。这不是一个理想的解决方案,但它会起作用。
  • 您可以使用 sender 对象在被调用方法上停止计时器

标签: c# .net wpf windows-phone-7 windows-phone


【解决方案1】:

假设这是System.Threading.Timer,来自constructor 的最终参数的文档:

期间
调用回调引用的方法之间的时间间隔。指定负一 (-1) 毫秒以禁用周期性信号。

所以:

Timer updateTimer = new Timer(testt, null,
                              TimeSpan.FromMilliseconds(1),   // Delay by 1ms
                              TimeSpan.FromMilliseconds(-1)); // Never repeat

1ms 的延迟真的有用吗?为什么不立即执行呢?如果您真的只是想在线程池线程上执行它,有更好的方法来实现。

【讨论】:

  • 错误:跨线程操作无效:控件'label8'从创建它的线程以外的线程访问。 - 尝试在表单上显示某些内容时。
  • @TomeeNS:那我怀疑你用错了定时器。
【解决方案2】:
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);
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-19
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多