2011-04-01 39 views
5

我在C#2010工作,我有一個計時器:C#定時器功能?

private Timer m_Timer; 


void KA(string SendStuff, object State) 
{ 

} 

m_Timer = new Timer(new TimerCallback(KA(DATA))); 

我想這個計時器調用函數「KA」,無論通過「DATA」就是它。

DATA是一個字符串

我怎麼會通過使用計時器信息功能「KA」?

感謝

回答

8

你可以使用委託/ lambda表達式:

string stuff = "hi"; 
Timer t = new Timer(new TimerCallback(_ => KA(stuff, null))); 

編輯:

考慮和反饋後,一個更清潔,簡化版本是:

string stuff = "hi"; 
Timer t = new Timer(state => KA(stuff, state)); 
+0

爲什麼'_'(下劃線)?它應該是'state => KA(stuff,state)' – digEmAll 2011-04-01 21:26:26

+0

都可以工作 - OP對狀態不感興趣,只是他的'stuff'字符串,所以我不需要這個狀態作爲參數。 – BrokenGlass 2011-04-01 21:29:01

+0

好奇的問題:如果在觸發定時器之前修改了內容,會發生什麼? – pdr 2011-04-01 21:32:10

4

我覺得這是什麼您正在尋找

private Timer m_Timer; 

void KA(object state) 
{ 
    string data = (string) state; 
} 

m_Timer = new Timer(new TimerCallback(KA), DATA); 
+0

另一個例子是在這裏:http://www.dotnetfunda.com/codes/code460-working-with-timercallback-delegate.aspx – Shawn 2011-04-01 21:36:15

0

嘗試研究這篇文章,在C#中演示了運行在一個指定的時間間隔,並使用一個後臺線程來執行指定的用戶操作的通用查詢組件。

使用範例:

IPoller poller = new UrlPoller(args[0], TimeSpan.FromSeconds(7)); 
IPolling pollingComponent = new Polling.Core.Polling(poller); 
pollingComponent.SubscribeForPollingUpdates(PollingAction); 
pollingComponent.Start(); 

的代碼和完整的示例見:

http://www.avantprime.com/blog/24/an-example-of-repeating-code-using-a-worker-thread-without-using-timers-c