2014-05-13 33 views
0

我想用System.Threading.Timer,這樣我可以用這個計時器來調用方法‘CreateThread’,這是如下。沒有重載「textBox1_TextChanged_1」匹配委託「System.Threading.TimerCallback

public void CreateThread() 
    { 
     th1 = new Thread(ChangeLabel); 
     th1.Start(); 
    } 

我在行收到錯誤:

public void textBox1_TextChanged_1(object sender, EventArgs e) 
    { 
     TimerCallback tcb = new TimerCallback(CreateThread); //This line is showing error 
    } 

任何人能請解釋一下是什麼問題?

回答

1

TimerCallback預計,在代表一個state屬性:

public void CreateThread(object state) 
    { 
     th1 = new Thread(ChangeLabel); 
     th1.Start(); 
    } 

MSDN

public delegate void TimerCallback(
    Object state 
) 
0

問題是您的方法簽名與TimerCallback委託不匹配。它將一個對象作爲參數,但您的方法不需要任何操作。

0

如果你看一下MSDN DocumentationTimerCallback代表,你會看到它有void TimerCallback(object)簽名。

您希望計時器調用的方法需要相同的簽名才能編譯。

像這樣的事情會解決它:

public void CreateThread() 
{ 
    CreateThread(null); 
} 

private void CreateThread(object state) 
{ 
    th1 = new Thread(ChangeLabel); 
    th1.Start(); 
} 

這將允許CreateThread()任何現有的呼叫者保持不變,同時給你一個方法,用正確的簽名來調用該方法。

public void textBox1_TextChanged_1(object sender, EventArgs e) 
{ 
    TimerCallback tcb = new TimerCallback(() => CreateThread()); 
} 

或者,你可以通過使用一個lambda執行以下操作

相關問題