我有一个ListBox,我需要选择所有项目。唯一的问题是,我在ListBox.SelectIndexChanged事件上有事件处理程序,它会做一些CPU密集型的事情。在循环中选择循环中的项会导致程序在循环的每次迭代中触发SelectIndexChanged事件。
我已将循环包含在Suspend / ResumeLayout()中,如下所示:
SuspendLayout();
for (int i = 0; i < listBox.Items.Count; i++)
listBox.SetSelected(i, true);
ResumeLayout();
但它仍会触发事件,但仍需要很长时间来更新选择。
我可以用一个简单的布尔标志解决问题,我在开始更新时切换,但是如果有一种更简洁的解决方法,那就太棒了。
感谢。
答案 0 :(得分:7)
另一个选项(除了使用布尔标志)将在循环之前取消注册事件处理程序并在循环之后重新注册。
listBox.SelectIndexChanged -= listBox_selectIndexChanged;
for (int i = 0; i < listBox.Items.Count; i++)
listBox.SetSelected(i, true);
listBox.SelectIndexChanged += listBox_selectIndexChanged;