簡體   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