繁体   English   中英

System.Threading.Timer

[英]System.Threading.Timer

当我们使用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 )是在主线程中执行还是在另一个线程中执行?

System.Threading.Timer将在线程池中的另一个线程上执行其工作。

System.Windows.Forms.Timer将在现有(GUI)线程上执行。

文档说如下:

为回调指定的方法应该是可重入的,因为它是在ThreadPool线程上调用的。

所以回调几乎肯定会在另一个线程上。

当然,如果从ThreadPool线程启动计时器,它可能会在同一个线程上执行,但不能保证。

MSDN国家:

使用TimerCallback委托指定希望Timer执行的方法。 定时器委托是在构造定时器时指定的,不能更改。 该方法不会在创建计时器的线程上执行; 它在系统提供的ThreadPool线程上执行。

因此,在您的示例中,计时器委托(CheckStatus)将在单独的线程中执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM