所以我刚刚开始学习活动,并且我编写了一个PeriodicTick
类,它继承了我编写的Tick
类。现在我认为它可以正常工作,但我认为我早些时候说过,现在使用Thread.Sleep()
总是一个糟糕的主意,因为我在单独的任务中使用Thread.Sleep()
,因此不应该有任何并行化问题。如何在没有Thread.Sleep的情况下打勾?
不过,我的问题是,在这种情况下,使用Thread.Sleep()
是否合适,如果不是,还有没有其他简单的解决方案可以实现同样的效果?
编辑:对!下面的代码..
class Tick
{
#region Fields & Properties
public delegate void TickHandler();
static int ctr = new int();
public readonly int ID;
public event TickHandler OnTick;
public bool isActive;
#endregion
public Tick()
{
ID = ctr++;
}
public virtual void Start()
{
OnTick();
}
}
class PeriodicTick : Tick
{
int tickTimer;
public Predicate<PeriodicTick> TickUntil { get; set; }
public PeriodicTick(int tickTimer, Predicate<PeriodicTick> tickUntil)
{
this.tickTimer = tickTimer;
TickUntil = tickUntil;
}
public override void Start()
{
Task TickTimer = Task.Factory.StartNew(
() =>
{
while (TickUntil.Invoke(this))
{
System.Threading.Thread.Sleep(tickTimer);
base.Start();
}
});
}
}
}
有几种不同类型的定时器在那里。 –
你想解决什么问题?如果你想要定期发生某些事情(每秒钟,每13分钟等),那么你需要一个计时器。定时器的一个很好的概述是[比较.NET框架类库中的定时器类](http://msdn.microsoft.com/zh-cn/magazine/cc164015.aspx) –
睡眠的基本概念,或更好,在后台线程中等待可取消的令牌很好。睡眠在GUI线程上大多是邪恶的。 –