2010-12-16 7 views
7

Когда мы используем 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) выполняется в основном потоке или она выполняется в другом потоке?

+0

Можете ли вы разместить свой код? – Oded 2010-12-16 09:51:32

+0

Это довольно неоднозначно, что вы пытаетесь задать здесь - можете ли вы отправить какой-то код, чтобы уточнить свой вопрос? – 2010-12-16 09:52:00

ответ

6

System.Threading.Timer выполнит свою работу над другим потоком в пуле потоков.

System.Windows.Forms.Timer будет выполнен на существующей (GUI) резьбе.

2

Документов сказать следующее:

Метод обратного вызова для указания, должен быть повторно, так как он вызывается Threadpool нитей.

Таким образом, обратный вызов почти наверняка будет в другом потоке.

Конечно, если вы запустите таймер из потока ThreadPool, есть вероятность, что он может выполнить в том же потоке, но без гарантии.

2

MSDN государства:

Используйте TimerCallback делегат указать метод, который вы хотите Timer выполнить. Делегат таймера указывается, когда таймер построен и не может быть изменен. Метод не выполняется в потоке, который создал таймер; он выполняется в потоке ThreadPool, поставляемом системой.

Следовательно, в вашем примере делегат таймера (CheckStatus) будет выполнен в отдельном потоке.

Смежные вопросы