2010-12-16 8 views
7

Wenn wir System.Threading.Timer verwenden, wird die Methode dann im Thread ausgeführt, der den Timer erstellt hat? Oder wird es in einem anderen Thread ausgeführt?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) 
    { 
    } 
} 

Meine Frage ist, ob das Verfahren durch den Zeitgeber Delegierten genannt (CheckStatus) in Haupt-Thread ausgeführt wird, oder in einem anderen Thread ausgeführt wird?

+0

Können Sie Ihren Code posten? – Oded

+0

Es ist eher zweideutig, was Sie hier fragen möchten - können Sie bitte etwas Code posten, um Ihre Frage zu klären? –

Antwort

6

System.Threading.Timer wird seine Arbeit an einem anderen Thread im Thread-Pool ausführen.

System.Windows.Forms.Timer wird auf dem vorhandenen (GUI) Thread ausgeführt.

+1

Auch zu beachten - der 'System.Windows.Forms.Timer' wird zu einem Threadpool Thread zurückkehren, wenn es keine aktiven Formulare (wie eine Konsolenanwendung) gibt. Und die Methode wird ausgeführt, wenn der Thread ansonsten inaktiv wäre (keine Ereignishandler werden ausgeführt). Aber du verbringst sowieso nicht viel Zeit in Eventhandlern, richtig? :) –

+0

@Vilx - Ich wusste das nicht, also danke für den zusätzlichen Kommentar zu meiner Antwort :) –

+0

Eigentlich ... ich nehme es zurück. Es wird nicht zurückgesetzt. Es ist nur in Windows Forms verwendbar. Aber ich bin mir sicher, dass ich vor nicht allzu langer Zeit einen der Standard-Timer gesehen habe, der unter Windows-Formularen oder Threadpool-Thread ... gewählt hat, aber jetzt nicht finden kann. :( –

2

Die docs folgendes sagen:

Das Verfahren für den Rückruf angegeben einspringenden sein sollte, weil es auf Threadpool Threads aufgerufen wird.

So wird der Rückruf fast sicher auf einem anderen Thread sein.

Natürlich, wenn Sie den Timer von einem ThreadPool-Thread starten, besteht die Möglichkeit, dass er auf demselben Thread ausgeführt wird, aber keine Garantie.

2

MSDN Staaten:

ein TimerCallback Delegat Verwenden Sie die Methode angeben möchten Sie die Timer auszuführen. Der Timerdelegate wird beim Erstellen des Timers angegeben und kann nicht geändert werden. Die Methode wird nicht im Thread ausgeführt, der den Timer erstellt hat. Es wird auf einem ThreadPool Thread ausgeführt, der vom System bereitgestellt wird.

Daher würde in Ihrem Beispiel Timer Delegate (CheckStatus) in einem separaten Thread ausgeführt werden.

Verwandte Themen