我有一个方法,它使用Timer类来调用方法并在特定的时间间隔内执行它。
private Timer tmr = new Timer();
public void WorkAtInterval(long interval, Action<object> work)
{
//heartbeat in miliseconds
tmr.Interval = interval;
tmr.Start();
tmr.Elapsed += new ElapsedEventHandler(work);
}
我已经定义了必须像这样调用的函数:
private static void WorkSample (object interval)
{
Console.WriteLine("The interval is: {0}",interval);
}
然后最终在我的主要功能中:
static void Main(string[] args)
{
HeartBeat heart = new HeartBeat();
var interval = heart.HeartBeatInterval;
heart.WorkAtInterval(interval,sampleWork(interval));
Console.Read();
}
不幸的是,这甚至没有编译。我和代表们的关系不是很好。关于如何让这个工作起来的任何建议?
答案 0 :(得分:0)
您可以使用lambda表达式:
heart.WorkAtInterval(interval, x => WorkSample(interval));
答案 1 :(得分:0)
解决方案是这样的。 WorkAtInterval的签名必须符合签名ElapsedEventHandler。然后在Main函数中,调用必须由匿名函数正确完成。
public void WorkAtInterval(long interval, Action<object,EventArgs> work)
{
//heartbeat in miliseconds
tmr.Interval = interval;
tmr.Start();
tmr.Elapsed += new ElapsedEventHandler(work);
}
private static void sampleWork(object interval)
{
Console.WriteLine("The interval is: {0}",interval);
}
static void Main(string[] args)
{
HeartBeat heart = new HeartBeat();
var interval = heart.HeartBeatInterval;
heart.WorkAtInterval(interval,(o,s) => sampleWork(interval));
Console.Read();
}