所以我剛剛開始學習活動,並且我編寫了一個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線程上大多是邪惡的。 –