無論:)
睡眠通常是令人難以接受的(可惜我不記得細節,但對一個,這是一個uninteruptible「塊」),並Timer
小號配備了大量的行李。如果可能的話,我會建議System.Threading.AutoResetEvent
這樣
// initially set to a "non-signaled" state, ie will block
// if inspected
private readonly AutoResetEvent _isStopping = new AutoResetEvent (false);
public void Process()
{
TimeSpan waitInterval = TimeSpan.FromMilliseconds (1000);
// will block for 'waitInterval', unless another thread,
// say a thread requesting termination, wakes you up. if
// no one signals you, WaitOne returns false, otherwise
// if someone signals WaitOne returns true
for (; !_isStopping.WaitOne (waitInterval);)
{
// do your thang!
}
}
使用一個AutoResetEvent
(或者其表弟ManualResetEvent
)保證了與線程安全的信號真正的塊(這樣的事情如上正常終止)。在最壞的情況,它是Sleep
希望這有助於:)
你有我的。 – Alan 2010-05-12 20:18:54
@Alan:你有我的 – abatishchev 2010-05-12 20:28:27
System.Timers.Timer類真的可以像System.Threading.Timer一樣在用戶模式應用程序中使用。在內部,System.Timers.Timer使用System.Threading.Timer作爲它的內部時間機制,並且只包裝它來處理設計時間問題。 – 2010-05-12 20:46:36