C#Windows窗体CheckedChanged落后于

时间:2018-04-17 07:09:54

标签: c# winforms checkbox eventhandler

我在System.Windows.Forms(C#)中遇到以下问题:

我的程序中有一个CheckBox,我为CheckedChanged定义了一个事件处理程序。问题是,当用户单击CheckBox时,可能会发生需要几秒钟才能将CheckBox明显标记为已选中。

我在CheckedChanged事件中设置了一个断点,并注意到它确实需要几秒钟才能触发CheckedChanged事件。怎么可能CheckedChanged事件落后那么多?

不幸的是,当触发CheckedChanged事件时,我无法在文献中找到有关此事的信息。可能是在触发CheckedChanged事件之前首先处理了另一个事件,所以我可以捕获此事件并使检查箭头及时显示?

感谢您的帮助和建议。

1 个答案:

答案 0 :(得分:1)

当CheckBox的Checked属性发生更改时,会发生CheckedChanged事件。

在处理完此事件的任何事件处理程序之后,UI不会更新复选框内的复选标记。如果您在CheckedChanged事件的处理程序中进行了大量处理,那么在从复选框添加/删除复选标记之前需要一些时间。

如果您需要快速更新UI,请考虑在单独的线程中进行处理。使用Task可以非常轻松地完成此操作。

这是一个简单的例子:

private void MyCheckBox_CheckedChanged(object sender, EventArgs e)
{
    //Don't do this:
    //ThreeSecondMethod();

    //Instead, do this:
    Task.Run(() => ThreeSecondMethod());
}

private void ThreeSecondMethod()
{
    DateTime deadline = DateTime.Now.AddSeconds(3);

    while(DateTime.Now < deadline)
    {
        /* Do nothing */
    }

    MessageBox.Show("Done!");
}