C#计时器函数?

5

我正在使用C# 2010开发,并且有一个计时器:

private Timer m_Timer;


void KA(string SendStuff, object State)
{

}

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

我希望这个计时器可以调用函数“KA”,并将“DATA”传递给它。
“DATA”是一个字符串。
使用计时器如何向函数“KA”传递信息?
谢谢。
3个回答

8
你可以使用委托/lambda表达式:

您可以使用委托/lambda表达式:

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

编辑:

考虑到反馈意见,我们进行了简化和优化:

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

为什么要使用下划线 _(underscore)?应该是 state => KA(stuff, state) - digEmAll
有趣的问题:如果在计时器触发之前修改了内容,会发生什么? - pdr
1
@pdr:由于这会创建一个闭包,因此stuff将在计时器触发时被评估。这可能是或可能不是OP想要的,它肯定是一个可能令人惊讶的副作用。 - BrokenGlass
1
你可以使用 @_ 来使它更加难以理解。 - Hans Passant
@Hans:@_ 是故意用 Perl 风格的吗?你的评论让我开心了! - Edurne Pascual
显示剩余4条评论

4
我想这就是你在寻找的内容。
private Timer m_Timer;

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

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

另一个例子在这里:http://www.dotnetfunda.com/codes/code460-working-with-timercallback-delegate.aspx - Shawn

0

尝试调查这篇文章,它展示了一个在指定间隔内运行并使用后台线程执行指定用户操作的通用轮询组件。

样例用法:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接