目前遇到问题,我正在使用计时器来制作动画,我希望能够决定从哪里开始使用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?
答案 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();
}
希望我帮助过,祝你有愉快的一天:)