2011-05-23 60 views
4

参见:ListBox select all itemsC#选择列表框中的所有项目 - 暂停事件处理

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

我已经包含在暂停/ ResumeLayout环路()像​​这样:

SuspendLayout(); 

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

ResumeLayout(); 

,但它仍然触发事件,仍然去需要较长的时间来更新选项。

可能解决这个问题,我用一个简单的布尔标志,当我开始更新时,我会切换,但如果有一个更好的方式来解决这个问题,那就太好了。

谢谢。

回答

7

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

listBox.SelectIndexChanged -= listBox_selectIndexChanged; 

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

listBox.SelectIndexChanged += listBox_selectIndexChanged; 
相关问题