C#选择ListBox中的所有项目 - 暂停事件处理

Ozz*_*zah 4 c# events event-handling winforms

请参阅:ListBox选择所有项目

我有一个ListBox,我需要选择所有项目.唯一的问题是,我在ListBox.SelectIndexChanged事件上有事件处理程序,它会做一些CPU密集型的事情.在循环中选择循环中的项会导致程序在循环的每次迭代中触发SelectIndexChanged事件.

我已将循环包含在Suspend/ResumeLayout()中,如下所示:

SuspendLayout();

for (int i = 0; i < listBox.Items.Count; i++)
  listBox.SetSelected(i, true);

ResumeLayout();
Run Code Online (Sandbox Code Playgroud)

但它仍然会触发事件并且仍然需要很长时间来更新选择.

可以用一个简单的布尔标志解决这个问题,当我开始更新时,我会切换,但是如果有一种更简洁的解决方法,那就太棒了.

谢谢.

Bal*_*a R 7

另一个选项(除了使用布尔标志)将在循环之前取消注册事件处理程序并在循环之后重新注册.

listBox.SelectIndexChanged -= listBox_selectIndexChanged;

for (int i = 0; i < listBox.Items.Count; i++)
  listBox.SetSelected(i, true);

listBox.SelectIndexChanged += listBox_selectIndexChanged;
Run Code Online (Sandbox Code Playgroud)