recycle process encounter a exception collection was modified enumeration operation might not execut...

在执行一个9万多的数据处理时报错,报错信息如下:

recycle process encounter a exception collection was modified enumeration operation might not execute

代码如下(示意代码)

for(int i=0;i<dt.xxtable.rows.count;i++)

{

    var query=listquery.where(查询条件);

    foreach(item in query)      

    {

      强类型DT.row row1=强类型DT.row.addnewrow();

      row1.beginedit();

      row1.a=item.a;

      row1.b=item.b;

      row1.endedit();

      强类型DT.xxtable.addxx_row(row1);

     } 

}

 

在网上找了N多办法,全列出来供各位参考:

1、采用for循环而不采用foreach循环,这类主要针对的是循环体是LIST<>等集合的处理办法

2、采用ReaderWriterLock,ReaderWriterLockSlim(.net4?)处理数据

3、采用lock(object) 替换 lock(this)

前人总结的这么多居然对我们的代码都无效,我K。

解决办法:

新建立一个原datatable的克隆,操作这个新的datatable,最后将原有的 DATASET.ADDROW(NEWROW)替换为DATASET.IMPORTROW(ROW);

DataTable newdt=dt.xxxtable.clone();

for(int i=0;i<dt.xxtable.rows.count;i++)

{

    var query=listquery.where(查询条件);

    foreach(item in query)      

    {

      //强类型DT.row row1=强类型DT.row.addnewrow();
        强类型DT.row row1=newdt.NewRow() as 强类型DT.row ;
      row1.beginedit();
      row1.a=item.a;
      row1.b=item.b;
      row1.endedit();
       newdt.rows.add(row1);
     } 
     foreach(datarow row in newdt)
    {
          强类型DT.XXXtable.importrow(row);
    }


}

 

 

转载于:https://www.cnblogs.com/forrestsun/archive/2012/07/02/2573357.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值