zoukankan      html  css  js  c++  java
  • C# 如何避免异常”集合已修改;可能无法执行枚举操作。“

    using System;

    using System.Collections.Generic;

    using System.Text;

    using LogHandler;

    using System.Threading;

    namespace ConsoleApplication5

    {

        class Program

        {

            private static List<string> lstShare = new List<string>();

            static void Main(string[] args)

            {

     

                Thread th1 = new Thread(thread1);

                th1.Start();

                Thread th2 = new Thread(thread2);

                th2.Start();

     

     

            }

     

            private static void thread1()

            {

                //该线程不停地独占列表,并追加数据

                while (true)

                {

                    lock (lstShare)

                    {

                        lstShare.Add("aaa");

                    }

                }

            }

     

            private static void thread2()

            {

                //该线程是期望创建一个共享列表的独立镜像,然后对镜像进行费时的操作

                while (true)

                {

                    try

                    {

                        List<string> lstTemp = new List<string>();

                        lock (lstShare)

                        {

                            lstTemp = lstShare;//如果使用这一句来创建镜像,就会发生异常

     

                            #region "正确的做法"

                            //foreach (string item in lstShare)

                            //{

                            //    lstTemp.Add(item);

                            //}

                            #endregion

                        }

     

                        foreach (string item in lstTemp)

                        {

                            //do nothing

                            Thread.Sleep(1);

                        }

                    }

                    catch (System.Exception ex)

                    {

                        Console.WriteLine(ex.Message);

                    }

     

                }

            }

        }

    }

  • 相关阅读:
    🍖名称空间与作用域
    🍖文件打开模式 "t"
    🍖函数参数
    【转】LINQ中的Aggregate语法
    【转】c#中string.trimstart() 和string.trimend() 的用法
    1094 和为k的连续区间(暴力)
    1095 Anigram单词
    1031 骨牌覆盖 (斐波拉契数列)
    最长公共子序列(模板 LCSL)
    1092 回文字符串(LCSL_DP)
  • 原文地址:https://www.cnblogs.com/lixiaolun/p/2828846.html
Copyright © 2011-2022 走看看