-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

ラムダ式を使用できます。

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