[英]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.