2

我不知道我的标题是否非常具体,但我的问题是我想等待 1 秒(1000 毫秒)来执行方法上的操作。我以前没有使用过计时器,但我看到你做了类似的事情:

aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

然后你定义你的 OnTimedEvent 方法:

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
}

关键是我要调用的方法接收 5 个参数,并且我看到的所有示例都使用对象源 ElapsedEventArgs e 事物。我想知道如何调用一个方法并在 1 秒后发送它的参数。非常感谢!

4

4 回答 4

1

创建一个小助手类,使用

  • 5 个参数和您的最终代表的字段
  • 计时器委托原型的单个方法,它使用您的 5 个参数(全部存在于实例中)调用您的最终委托

现在实例化它,分配参数并将包装器方法设置为您的计时器委托。

于 2013-04-26T21:29:39.897 回答
0

您可以使用匿名委托。

Lambda 语法是最简单的方法

aTimer.Elapsed += (source, args) => OnTimedEvent(source, args, extraarg1, extraarg2 /* etc */);

但您也可以使用旧语法:

aTimer.Elapsed += delegate (object source, ElapsedEventArgs args) { OnTimedEvent(source, args, extraarg1, extraarg2 /* etc */); };
于 2013-04-26T22:21:47.860 回答
0

而问题是...

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
    MyMethod(par1, par2, parn..);
}
于 2013-04-26T21:26:47.780 回答
0

你有没有想过延长计时器来做你想做的事?这是一些示例代码:

 class Program
{



    static void Main(string[] args)
    {
        TimerEx timer = new TimerEx(1000, 1, 2, 3, 4, 5);
        timer.ElapsedEx += new ElapsedExEventHandler(timer_ElapsedEx);
        timer.Start();


        Console.ReadKey();
    }

    static void timer_ElapsedEx(object sender, ElapsedEventArgsEx e)
    {
        Console.WriteLine(e.P1.ToString());
    }



    public delegate void ElapsedExEventHandler(object sender, ElapsedEventArgsEx e);

    public class TimerEx : System.Timers.Timer
    {
        private ElapsedEventArgsEx e;

        public TimerEx(double interval, object p1, object p2, object p3, object p4, object p5) : base(interval)
        {
            e = new ElapsedEventArgsEx() { P1 = p1, P2 = p2, P3 = p3, P4 = p4, P5 = p5 };
            this.Elapsed += new ElapsedEventHandler(TimerEx_Elapsed);
        }

        void TimerEx_Elapsed(object sender, ElapsedEventArgs e)
        {
            this.OnElapsedEx(e.SignalTime);
        }



        public event ElapsedExEventHandler ElapsedEx;
        private void OnElapsedEx(DateTime signalTime)
        {
            var handler = this.ElapsedEx;
            if (handler != null)
            {
                e.SignalTime = signalTime;
                handler(this, e);
            }
        }
    }

    public class ElapsedEventArgsEx : EventArgs
    {
        public ElapsedEventArgsEx()
        {

        }

        public DateTime SignalTime { get; set; }
        public object P1 { get; set; }
        public object P2 { get; set; }
        public object P3 { get; set; }
        public object P4 { get; set; }
        public object P5 { get; set; }
    }

    }
于 2013-04-26T22:10:07.643 回答