将变量传递给timer_tick

时间:2015-01-08 15:55:59

标签: c# timer

目前遇到问题,我正在使用计时器来制作动画,我希望能够决定从哪里开始使用Start和Stop整数,如下所示。

private void Button1_Click(object sender, EventArgs e)
{
    AnimateKey(0,100); 
}

private void AnimateKey(int Start, int Stop)
{
    myTimer.Interval = 5;
    myTimer.Tick += new EventHandler(myTimer_Tick);
    myTimer.Enabled = true;
    myTimer.Start();
}

private void myTimer_Tick(object sender, EventArgs e)
{
    lock (myTimer)
    {
        int StartingFrame = Start;
        int StopFrame = Stop;
        etc...etc..
    }
}

现在我的问题是我想将值0和100传递给Timer Tick事件,但我不知道如何去做。 如何从按钮单击到计时器滴答中获取整数0和100?

3 个答案:

答案 0 :(得分:4)

在定义tick事件处理程序时,只需使用lambda来关闭所需的参数:

private void AnimateKey(int Start, int Stop)
{
    myTimer.Interval = 5;
    myTimer.Tick += (s, args) => myTimer_Tick(Start, Stop);
    myTimer.Enabled = true;
    myTimer.Start();
}

private void myTimer_Tick(int Start, int Stop)
{
    //Do stuff
}

另请注意,您正在使用的Tick的{​​{1}}事件将在UI线程中触发,因此不需要Timer;代码已经同步。

答案 1 :(得分:0)

使用包含所有信息的类:

public class TimerInfo
{
     public int Start;
     public int Stop;
}

将实例存储在计时器的标记

myTimer.Tag = new TimerInfo { Start = 0, Stop = 100 };

在eventhandler中访问此信息

myTimer = (Timer)sender;
TimerInfo ti = (TimerInfo)myTimer.Tag;

答案 2 :(得分:0)

有点难以理解你的意思,但让我们试一试。 如果您想要将整数开始和停止传递给函数TimerTick,您可能不了解EventArgs参数。 EventArgs用于存储与您的场景相关的争论 - 解决方案很简单。

class myTimerEventArgs:EventArgs // Declaring your own event arguements which you want to send
{
 public int start{get;set;} 
 public int stop {get;set;}
 /*Constructor, etc...*/
}
...
//Making the call inside another class:
myTimer_Tick(this,new myTimerEventArgs(0,100);

然而,我可能会误解你;如果正在讨论计数滴答,直到它达到100个滴答(/间隔),解决方案是一个添加到事件的简单函数,可能看起来像这样:

int Count = 0;
...
private void Counter(object sender, EventArgs e)
{
Count++;
}
...
private void AnimateKey(int Start, int Stop)
 {
     myTimer.Interval = 5;
     myTimer.Tick += new EventHandler(myTimer_Tick);
     myTimer.Tick += new EventHandler(Counter);
     myTimer.Enabled = true;
     myTimer.Start();
     while(Count!=100);
     myTimer.Stop();
 }

希望我帮助过,祝你有愉快的一天:)