如何在两个基本线程中显示随机结果

时间:2016-02-12 12:36:35

标签: c# multithreading

我有一个列表List<int> Test,为了进行测试,我需要制作基本线程,一个用于填充,第二个用于随机显示相同的项目。因此,任务是填充并在控制台中随机显示结果。当然,问题是我的显示方法将该列表作为参数,因此同样的实例可能是要解决的问题。这是我的代码,它只是填充然后显示项目:

        static void Main(string[] args)
        {
            List<int> testList = new List<int>();
            System.Threading.Thread.Sleep(300);
            for (int y = 0; y < 50; y++)
            {
                testList.Add(y);
                Console.WriteLine(string.Format("Added item {0}!", y));
            };

            Thread testThread1 = new Thread(() => FillList(testList));
            testThread1.Start();
            Console.ReadKey();
        }

        public static void FillList(List<int> pTestList)
        {
            foreach(int x in pTestList)
            {
                System.Threading.Thread.Sleep(1000);
                Console.WriteLine(x.ToString());
            }
        }

更新

我想在我的控制台中显示几个&#34;已添加项目&#34;和物品。所以要从图像中混合第一部分和第二部分。

enter image description here

1 个答案:

答案 0 :(得分:1)

我会使用Structobject,其中包含变量Position。 然后代码看起来像:

        static void Main(string[] args)
        {
            List<int> testList = new List<int>();
            System.Threading.Thread.Sleep(300);
            Random rng = new Random(123);
            for (int y = 0; y < 50; y++)
            {
                testList.Add(y);
                Console.WriteLine(string.Format("Added item {0}!", y));
            };

            Thread testThread1 = new Thread(() => FillList(testList));
            testThread1.Start();
            Console.ReadKey();
        }

        public static void FillList(List<int> pTestList)
        {
            List<Number> testList = new List<Number>();
            Random rng = new Random(123);
            foreach (var item in pTestList)
            {
                testList.Add(new Number() { IntNumber = item, Position = rng.Next() });
            }

            foreach (Number x in testList.OrderBy(x => x.Position))
            {
                System.Threading.Thread.Sleep(1000);
                Console.WriteLine(x.IntNumber);
            }
        }

        public struct Number
        {
            public int Position { get; set; }
            public int IntNumber { get; set; }
        }