Измените свой код для запуска логики после обновления состояния проверки элемента:
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
checkedListBox1.BeginInvoke(new Action(() =>
{
if (checkedListBox1.CheckedItems.Count == checkedListBox1.Items.Count)
{
checkedListBox1.Items.Clear();
}
}));
}
Согласно документации , по умолчанию, когда возникает событие ItemCheck
,состояние проверки элемента не обновляется до тех пор, пока не произойдет событие ItemCheck
.Это означает, что он пытается обновить состояние проверки элемента после выполнения кода, который есть в обработчике событий.В результате в вашем коде он пытается обновить состояние проверки элемента после удаления элемента из коллекции элементов, поэтому возникает исключение.Вы можете увидеть, что происходит в трассировке стека, а также в исходном коде элемента управления.
В приведенном выше коде, используя BeginInvoke
, мы откладываем запуск кода после обновления состояния проверки.Вы можете прочитать больше об этом в этом посте .