msdn的解释:
foreach
语句是对枚举数的包装,它只允许从集合中读取,不允许写入集合。
也就是,不能在foreach里遍历的时侯把它的元素进行删除或增加的操作的
将注释的写法改为:
//foreach (var tempOrderId in _OrderListForDataTime.Keys)
//{
// if (_OrderListForDataTime[tempOrderId] > DateTime.Now.AddMinutes(-3))
// {
// GetAutoOutTicketTask tempGetAutoOutTicketTask = _OrderList[tempOrderId] as GetAutoOutTicketTask;
// tempGetAutoOutTicketTask.ExceptionEvent -= new ExceptionEventHandler(tempGetOrderTask_ExceptionEvent);
// AsyncTaskFactory.SysAsyncManager.DelAsyncClass(tempGetAutoOutTicketTask);
// _OrderList.Remove(tempOrderId);
// _OrderListForDataTime.Remove(tempOrderId);
// }
//}
ArrayList akeys = new ArrayList(_OrderListForDataTime.Keys);
for (int i = 0; i < akeys.Count; i++)
{
long tempOrderId = (long)akeys[i];
if (_OrderListForDataTime[tempOrderId] > DateTime.Now.AddMinutes(-3))
{
GetAutoOutTicketTask tempGetAutoOutTicketTask = _OrderList[tempOrderId] as GetAutoOutTicketTask;
tempGetAutoOutTicketTask.ExceptionEvent -= new ExceptionEventHandler(tempGetOrderTask_ExceptionEvent);
AsyncTaskFactory.SysAsyncManager.DelAsyncClass(tempGetAutoOutTicketTask);
_OrderList.Remove(tempOrderId);
_OrderListForDataTime.Remove(tempOrderId);
}
}