2011-07-27 80 views
2

我有一個類內的計時器,當這個計時器觸發時,我想調用這個類的實例方法。我如何從靜態定時器回調方法訪問它?從靜態時間回調呼叫實例方法

private void ClassInstanceMethod() 
{ 
} 

public static void TimerFired(object source, ElapsedEventArgs e) 
{ 
    // Want to call ClassInstanceMethod() here 
} 

private void startTimer() 
{ 
    timer = new Timer(); 
    timer.Interval = 1000; 
    timer.Elapsed += new ElapsedEventHandler(TimerFired); 
    timer.AutoReset = false; 
    timer.Enabled = true; 
} 

解決
我有誤解,認爲TimerFired必須是靜態的 - 它沒有。

+0

好吧,你不能 - 你爲什麼要這麼做。即什麼阻止使你的方法是靜態的? –

+1

或者TimerFired方法是非靜態的?當然是 – carlosfigueira

+0

,但靜態方法通常會將調用實例對象作爲參數。 – Egil

回答

1

你不能。 source參數是Timer對象,並且ElapsedEventArgs對象不包含對類實例的任何引用。正如在註釋中所討論的那樣,您可以使TimerFired方法是非靜態的(即實例),並且從那裏您可以安全地調用ClassInstanceMethod和其他類實例方法。