首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Threading.Timer

System.Threading.Timer
EN

Stack Overflow用户
提问于 2010-12-16 17:49:15
回答 3查看 2.5K关注 0票数 7

当我们使用System.Threading.Timer时,那么这个方法是在创建计时器的线程上执行的吗?或者ir是在另一个线程中执行的?

代码语言:javascript
复制
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)调用的方法是在主线程中执行还是在另一个线程中执行?

EN

回答 3

Stack Overflow用户

发布于 2010-12-16 17:51:38

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

System.Windows.Forms.Timer将在现有的(图形用户界面)线程上执行。

票数 6
EN

Stack Overflow用户

发布于 2010-12-16 17:53:12

文档中这样写道:

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2010-12-16 17:58:11

MSDN状态:

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4459351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档