Timer类和带有传递参数的调用方法

时间:2013-10-02 15:44:56

标签: c# timer delegates action

我有一个方法,它使用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();
        }

不幸的是,这甚至没有编译。我和代表们的关系不是很好。关于如何让这个工作起来的任何建议?

2 个答案:

答案 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();
        }