2011-04-01 62 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