我在System.Windows.Forms(C#)中遇到以下问题:
我的程序中有一个CheckBox,我为CheckedChanged定义了一个事件处理程序。问题是,当用户单击CheckBox时,可能会发生需要几秒钟才能将CheckBox明显标记为已选中。
我在CheckedChanged事件中设置了一个断点,并注意到它确实需要几秒钟才能触发CheckedChanged事件。怎么可能CheckedChanged事件落后那么多?
不幸的是,当触发CheckedChanged事件时,我无法在文献中找到有关此事的信息。可能是在触发CheckedChanged事件之前首先处理了另一个事件,所以我可以捕获此事件并使检查箭头及时显示?
感谢您的帮助和建议。
答案 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!");
}