在滴答声中间停止计时器

时间:2013-04-01 13:50:05

标签: c# timer

我想在勾号结束前停止计时器,但是在勾号中间。但是当我使用一个按钮来停止计时器时,它只会在刻度完成所有功能后停止。

我使用了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);
        }

    }
}

4 个答案:

答案 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期间处于休眠状态,因此可能会有一系列事件。

正如亚历克斯提出的那样你可以添加一个标志,但你应该在每次睡眠后检查它,或者更好的是,将你的动画放在不同的线程中。