将变量传递给 timer_tick

Passing a variable to timer_tick

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

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?

对所有信息使用 class:

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

在计时器的标签中存储一个实例

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

在事件处理程序中您可以访问此信息

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

有点难以理解你的意思,但让我们试一试。 如果您提到要将整数开始和停止传递给函数 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();
 }

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

只需在定义 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
}

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