创建复选框检查序列

时间:2012-05-04 02:04:25

标签: c# loops checkbox sequence

您好我正在尝试编程一些复选框,以编程方式以特定顺序检查和取消选中。我知道这听起来很愚蠢,但这对应于我已编码检查事件的一些LED控件。

我想检查一个复选框以启动此序列并取消选中它以停止它。目前检查和取消选中我的D2复选框很正常,但是do while循环冻结了表单,所以我实际上无法取消选中循环框。我可能不应该使用Thread.Sleep。任何建议都表示赞赏。

private void cycleCheckBox_CheckedChanged(object sender, EventArgs e)
        {
            do
            {
                D2.Checked = true;
                Thread.Sleep(1000);
                D2.Checked = false;
                Thread.Sleep(1000);    

            } while (cycleCheckBox.Checked);
        }

2 个答案:

答案 0 :(得分:1)

如果直接在checked事件中调用Thread.Sleep方法将在UI线程上运行,这就是UI冻结的原因。将工作推送到System.Windows.Forms.Timer(假设这是一个WinForms应用程序):

  

实现以用户定义的间隔引发事件的计时器。   此计时器已针对Windows窗体应用程序进行了优化,并且必须   在窗口中使用。

基于您的问题的示例:

Timer _timer;

private void cycleCheckBox_CheckedChanged(object sender, EventArgs e)
{
    if(_timer == null )
    {
        _timer = new Timer();
        _timer.Interval = 1000; // 1 second
        _timer.Tick += DoTimerWork;
    }

    if(cycleCheckBox.Checked)
    {
        _timer.Start();
    }
    else
    {
        _timer.Stop();
    }
}

private void DoTimerWork(object obj, EventArgs args) 
{
    D2.Checked = !D2.Checked;
}

答案 1 :(得分:0)

我不知道这对你是否有用,但是我要做的是在1000毫秒时在Timer Control中拖动并使用一种方法通过使用循环为0的整数来确定当前应该检查哪个复选框某个点并在每个刻度处递增。