我正在尝试通过删除所有项目并重新添加新项目来刷新ContextMenu
控件中的项目列表。我遍历所有项目以取消挂起他们的Click
事件并处理它们,然后我清除列表,如下所示:
var menuItems = rightClickMenu.MenuItems;
foreach (MenuItem menuItem in menuItems)
{
menuItem.Click -= menuItem_Click;
menuItem.Dispose();
}
menuItems.Clear();
但是当我这样做时,会移除一些项目,但是我会以null
获得menuItem
,即使我100%确定该集合不包含任何空值。发生了什么事?
答案 0 :(得分:2)
您正在修改foreach循环中的集合,这是不允许的。而是创建一个集合的副本并处理它。
var menuItems = rightClickMenu.MenuItems.Cast<MenuItem>().ToArray();
foreach (MenuItem menuItem in menuItems)
{
menuItem.Click -= menuItem_Click;
menuItem.Dispose();
}
rightClickMenu.MenuItems.Clear();