Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Windows窗体检查更改滞后_C#_Winforms_Checkbox_Eventhandler - Fatal编程技术网

C#Windows窗体检查更改滞后

C#Windows窗体检查更改滞后,c#,winforms,checkbox,eventhandler,C#,Winforms,Checkbox,Eventhandler,我对System.Windows.Forms(C#)有以下问题: 我的程序中有一个复选框,我为CheckedChanged定义了一个事件处理程序。问题是,当用户单击复选框时,可能需要几秒钟才能将复选框明显标记为选中 我在CheckedChanged事件中设置了一个断点,并注意到实际上,有时需要几秒钟才能触发CheckedChanged事件。CheckedChanged事件怎么会落后那么多 不幸的是,我无法在文献中找到有关何时触发CheckedChanged事件的信息。可能是在触发CheckedC

我对System.Windows.Forms(C#)有以下问题:

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

我在CheckedChanged事件中设置了一个断点,并注意到实际上,有时需要几秒钟才能触发CheckedChanged事件。CheckedChanged事件怎么会落后那么多

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

感谢您的帮助和建议。

当复选框的
Checked
属性更改时,会发生此事件

在处理此事件的任何eventhandler之前,UI不会更新复选框内的复选标记。如果您正在处理程序中对
CheckedChanged
事件进行大量处理,则需要一段时间才能从复选框中添加/删除复选标记

如果需要快速更新UI,那么考虑在单独的线程中进行处理。使用

任务
可以非常轻松地完成此任务

下面是一个简单的例子:

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!");
}
private void MyCheckBox\u CheckedChanged(对象发送方,事件参数e)
{
//不要这样做:
//三秒法();
//相反,请执行以下操作:
运行(()=>ThreeSecondMethod());
}
私有void ThreeSecondMethod()
{
DateTime deadline=DateTime.Now.AddSeconds(3);
while(DateTime.Now<截止日期)
{
/*无所事事*/
}
MessageBox.Show(“完成!”);
}

通常,当您在UI线程上进行处理时,您会看到这一点。使用debug.WriteLine将调用注释转储到各种处理程序中,这样您就可以在无需单步执行代码的情况下查看单击和结果之间发生的情况。因此,如果您创建一个只有复选框且只有其事件处理程序的空表单,您是否会遇到相同的延迟?通常情况下,表单不会出现此问题,它特定于此表单,即使是这种形式,它也不总是发生。我的实验表明,CheckedChanged事件在单击和CheckedStateChanged事件之前触发。似乎CheckedChanged事件确实在更改发生后立即触发。问题是为什么点击后需要这么多秒?原因可能是什么?@Entwickler582-您需要提供一个解决方案。@Entwickler582您找到解决此问题的方法了吗?