我想在勾号结束前停止计时器,但是在勾号中间。但是当我使用一个按钮来停止计时器时,它只会在刻度完成所有功能后停止。
我使用了4个radiobuttons和一个不断更改所选单选按钮的计时器。当我按下“停止”按钮时,我的计时器停止,我需要知道选择了什么单选按钮,但计时器在刻度完成后停止,所以选定的单选按钮会改变。
代码是:
namespace teste_bola
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Int32 x = 1000;
private void ini_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}
private void par_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}
private void t_Click(object sender, EventArgs e)
{
Int32 Intervalo = Convert.ToInt32(tb.Text);
x = Intervalo;
}
private void timer1_Tick(object sender, EventArgs e)
{
r3.Select();
System.Threading.Thread.Sleep(x);
r2.Select();
System.Threading.Thread.Sleep(x);
r1.Select();
System.Threading.Thread.Sleep(x);
r2.Select();
System.Threading.Thread.Sleep(x);
r3.Select();
System.Threading.Thread.Sleep(x);
r4.Select();
System.Threading.Thread.Sleep(x);
}
}
}
答案 0 :(得分:1)
您可以引入标记bool shouldStop
,在单击按钮时设置它,然后从Tick
处理程序进行检查。如果是,则退出方法。
答案 1 :(得分:1)
我没有按照您在代码中尝试完成的操作,但在我看来,您似乎没有正确使用计时器。
您应该执行以下操作:
在每个计时器上。点击更改所选的radiobox。
你实际做的是:
在每个计时器上。通过更改之间的时间间隔,更换所有无线电控制器。
这意味着在第一个定时器超时时执行刻度代码。 在第二个计时器超时时,第一个打勾作业尚未完成。
这至少会导致不稳定的行为。
我的建议。将单选按钮添加到ArrayList。然后在Timer tick上的每个ArrayList项之间选择cicle。
答案 2 :(得分:0)
尝试以下
private void timer1_Tick(object sender, EventArgs e)
{
r3.Select();
System.Threading.Thread.Sleep(x);
if(timer1.Enabled == false) return;
r2.Select();
System.Threading.Thread.Sleep(x);
if(timer1.Enabled == false) return;
r1.Select();
System.Threading.Thread.Sleep(x);
if(timer1.Enabled == false) return;
r2.Select();
System.Threading.Thread.Sleep(x);
if(timer1.Enabled == false) return;
r3.Select();
System.Threading.Thread.Sleep(x);
if(timer1.Enabled == false) return;
r4.Select();
System.Threading.Thread.Sleep(x);
}
答案 3 :(得分:0)
您可能会遇到此行为,因为您的线程在执行timer1_Tick期间处于休眠状态,因此可能会有一系列事件。
正如亚历克斯提出的那样你可以添加一个标志,但你应该在每次睡眠后检查它,或者更好的是,将你的动画放在不同的线程中。