当我们使用System.Threading.Timer时,那么在创建计时器的线程上执行的方法是什么?或者是在另一个线程中执行?
class Timer
{
static void Main()
{
TimerCallback tcall = statusChecker.CheckStatus;
Timer stateTimer = new Timer(tcb, autoEvent, 1000, 250);
}
}
class StatusChecker
{
public void CheckStatus(Object stateInfo)
{
}
}
我的问题是,定时器委托调用的方法(CheckStatus
)是在主线程中执行还是在另一个线程中执行?
答案 0 :(得分:6)
System.Threading.Timer
将在线程池中的另一个线程上执行其工作。
System.Windows.Forms.Timer
将在现有(GUI)线程上执行。
答案 1 :(得分:2)
文档说出以下内容:
为回调指定的方法应该是可重入的,因为它是在ThreadPool线程上调用的。
所以回调几乎肯定会在另一个线程上。
当然,如果从ThreadPool线程启动计时器,它可能会在同一个线程上执行,但不能保证。
答案 2 :(得分:2)
MSDN状态:
使用
TimerCallback
委托指定您希望Timer
执行的方法。定时器委托是在构造定时器时指定的,不能更改。该方法不会在创建计时器的线程上执行;它在系统提供的ThreadPool
线程上执行。
因此,在您的示例中,计时器委托(CheckStatus)
将在单独的线程中执行。