【发布时间】:2009-05-02 16:10:59
【问题描述】:
我有一个计时器,它不需要同时处理其经过的事件处理程序。但是处理一个 Elapsed 事件可能会干扰其他事件。我实施了以下解决方案,但感觉有些不对;似乎我应该以不同的方式使用计时器或在线程空间中使用另一个对象。计时器似乎最合适,因为我确实需要定期检查状态,但有时检查会比我的间隔时间长。这是解决这个问题的最佳方法吗?
// member variable
private static readonly object timerLock = new object();
private bool found = false;
// elsewhere
timer.Interval = TimeSpan.FromSeconds(5).TotalMilliseconds;
timer.Elapsed = Timer_OnElapsed;
timer.Start();
public void Timer_OnElapsed(object sender, ElapsedEventArgs e)
{
lock(timerLock)
{
if (!found)
{
found = LookForItWhichMightTakeALongTime();
}
}
}
【问题讨论】:
-
这不应该是一个社区维基。
-
@Samuel - 如果发布者愿意,任何问题都可以成为社区 wiki。 FAQ 仅指定某些问题从一开始就应该是社区 wiki,但并不限制将 CW 应用于任何问题。
-
@tvanfosson:我让他知道像这样的问题不应该成为社区维基。
-
@Samuel - 我的意思是,在提出问题时没有“不应该”,在某些情况下只有“应该”。如果他们想要一个不会“要求”它的问题,则由 OP 选择 CW。如果你说“不需要”,那我就不会狡辩了。
标签: c# .net multithreading timer