-2

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

不幸的是,这甚至没有编译。我对代表的态度不是很好。关于如何让它发挥作用有什么建议吗?

4

2 回答 2

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();
        }
于 2013-10-02T18:19:57.537 回答
0

您可以使用 lambda 表达式:

heart.WorkAtInterval(interval, x => WorkSample(interval));
于 2013-10-02T15:47:33.573 回答