定时器不工作
Timer doesn't work
我是第一次使用定时器,所以可能是我做错了。
我的代码是这样的:
private void timer1_Tick(object sender, EventArgs e)
{
button2.PerformClick();
}
private void button2_Click(object sender, EventArgs e)
{
// random code here
timer1.Interval = 5000;
timer1.Start();
timer1_Tick(null,null);
}
我想做的是:执行随机代码,然后等待计时器间隔并执行 Tick(这将再次在按钮中执行 'click',再次执行相同),并永远重复这个。
对不起,如果这是一个容易犯的错误,我就是从这个开始的,但不知道自己做错了什么。
谢谢你读我! :D
给你。 . . .
private void button2_Click(object sender, EventArgs e)
{
// random code here
timer1.Interval = 5000;
timer1.Start();
timer1.Tick += timer1_Tick;
}
void timer1_Tick(object sender, EventArgs e)
{
//Your timing code here.
}
定时器事件(适用于各种定时器)不需要您手动调用。
你设置它的事件处理方法,设置间隔并启动它。
底层框架会在需要调用事件时调用您的 Tick
事件。
因此您需要将 随机代码 放在一个子程序中,您可以从 Tick
事件和按钮单击事件中调用该子程序。此外,您应该考虑阻止计时器的进一步激活。您可以禁用按钮,当您完成 随机代码 并且条件为真时,停止计时器并重新启用按钮。
private void button2_Click(object sender, EventArgs e)
{
stopTheTimer = false;
YourCommonMethod();
button2.Enabled = false;
timer1.Tick += timer1_Tick
timer1.Interval = 5000;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
YourCommonMethod();
}
private void YourCommonMethod()
{
// execute your 'random' code here
if(stopTheTimer)
{
timer1.Stop();
timer1.Tick -= timer1_Tick; // disconnect the event handler
button2.Enabled = true;
}
}
只连接 Tick() 事件 一次,最好通过 IDE,这样你就不会得到多个处理程序和你的代码 运行 每个 Tick() 事件不止一次。
*在下面的示例中,我将其连接到构造函数中作为替代方案...但不要这样做 并且 通过 [=24] 连接它=] 或者它会为每个 Tick() 触发两次。
您可能只想在 Button 处理程序中调用 Start(),然后在 Tick() 事件中调用您的 "random code",如下所示:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
timer1.Enabled = false;
timer1.Interval = (int)TimeSpan.FromSeconds(5).TotalMilliseconds;
timer1.Tick += timer1_Tick; // just wire it up once!
}
private void button1_Click(object sender, EventArgs e)
{
if (!timer1.Enabled)
{
Foo(); // <-- Optional if you want Foo() to run immediately without waiting for the first Tick() event
timer1.Start();
}
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Stop();
}
private void timer1_Tick(object sender, EventArgs e)
{
Foo();
}
private void Foo()
{
Console.WriteLine("Random Code @ " + DateTime.Now.ToString());
}
}
这与其他答案没有太大区别,但是多次连接 Tick() 事件是一个严重的缺陷...
我是第一次使用定时器,所以可能是我做错了。
我的代码是这样的:
private void timer1_Tick(object sender, EventArgs e)
{
button2.PerformClick();
}
private void button2_Click(object sender, EventArgs e)
{
// random code here
timer1.Interval = 5000;
timer1.Start();
timer1_Tick(null,null);
}
我想做的是:执行随机代码,然后等待计时器间隔并执行 Tick(这将再次在按钮中执行 'click',再次执行相同),并永远重复这个。
对不起,如果这是一个容易犯的错误,我就是从这个开始的,但不知道自己做错了什么。
谢谢你读我! :D
给你。 . . .
private void button2_Click(object sender, EventArgs e)
{
// random code here
timer1.Interval = 5000;
timer1.Start();
timer1.Tick += timer1_Tick;
}
void timer1_Tick(object sender, EventArgs e)
{
//Your timing code here.
}
定时器事件(适用于各种定时器)不需要您手动调用。
你设置它的事件处理方法,设置间隔并启动它。
底层框架会在需要调用事件时调用您的 Tick
事件。
因此您需要将 随机代码 放在一个子程序中,您可以从 Tick
事件和按钮单击事件中调用该子程序。此外,您应该考虑阻止计时器的进一步激活。您可以禁用按钮,当您完成 随机代码 并且条件为真时,停止计时器并重新启用按钮。
private void button2_Click(object sender, EventArgs e)
{
stopTheTimer = false;
YourCommonMethod();
button2.Enabled = false;
timer1.Tick += timer1_Tick
timer1.Interval = 5000;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
YourCommonMethod();
}
private void YourCommonMethod()
{
// execute your 'random' code here
if(stopTheTimer)
{
timer1.Stop();
timer1.Tick -= timer1_Tick; // disconnect the event handler
button2.Enabled = true;
}
}
只连接 Tick() 事件 一次,最好通过 IDE,这样你就不会得到多个处理程序和你的代码 运行 每个 Tick() 事件不止一次。
*在下面的示例中,我将其连接到构造函数中作为替代方案...但不要这样做 并且 通过 [=24] 连接它=] 或者它会为每个 Tick() 触发两次。
您可能只想在 Button 处理程序中调用 Start(),然后在 Tick() 事件中调用您的 "random code",如下所示:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
timer1.Enabled = false;
timer1.Interval = (int)TimeSpan.FromSeconds(5).TotalMilliseconds;
timer1.Tick += timer1_Tick; // just wire it up once!
}
private void button1_Click(object sender, EventArgs e)
{
if (!timer1.Enabled)
{
Foo(); // <-- Optional if you want Foo() to run immediately without waiting for the first Tick() event
timer1.Start();
}
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Stop();
}
private void timer1_Tick(object sender, EventArgs e)
{
Foo();
}
private void Foo()
{
Console.WriteLine("Random Code @ " + DateTime.Now.ToString());
}
}
这与其他答案没有太大区别,但是多次连接 Tick() 事件是一个严重的缺陷...