【发布时间】:2014-06-07 10:52:47
【问题描述】:
我有一个 System.Threading.Timer 频繁触发(为了简单起见,我们说每秒一次),在 CallBack 中我需要调用一个 Action(通过构造函数传入,因此位于另一个类中),我在其中做一些处理(假设需要 2 秒以上),我将如何防止我的处理逻辑被多次调用?似乎 lock() 在 Action 调用中不起作用? 我使用的是 .net 3.5。
public TestOperation(Action callBackMethod)
{
this.timer = new System.Threading.Timer(timer_Elapsed, callbackMethod, timerInterval, Timeout.Infinite);
}
private void timer_Elapsed(object state)
{
Action callback = (Action) state;
if (callback != null)
{
callback();
}
}
// example of the callback, in another class.
private void callBackMethod()
{
// How can I stop this from running every 1 second? Lock() doesn't seem to work here
Thread.Sleep(2000);
}
谢谢!
【问题讨论】:
-
使用一个任务并让该任务在完成后安排一个新任务。如果需要,您可以将第二个任务延迟一秒。
-
创建一次性计时器并在回调中更新。见stackoverflow.com/a/684452/56778
标签: c# multithreading .net-3.5