C#版关于之前看到的睡眠排序
2014-04-27 来自:sherry 0 人回应

之前看别人的博客看到这个排序方法,就拿来试了下,
因为要给线程传递参数我先用了ParameterizedThreadStart传参数
结果是正确的。
后来我改用匿名函数,就不用特意为传参数单独写个结构或者类了,
但是问题是,现在我传进去一个整数数组,老报错说IndexOutOfRangeException
但是调试执行却没有错,不过结果不是我想要的。
为什么i的值会是9呢,我明明让i<sortThread.Length.
希望帮忙解答以下,谢谢。
以下是代码:

private void DoSort()
{
int[] ints = { 1, 4, 7, 3, 8, 9, 2, 6, 5 };

        Thread[] sortThreads = new Thread[ints.Length];
        for (int i = 0; i < sortThreads.Length; i++)
        {
            //sortThreads[i] = new Thread(new ParameterizedThreadStart(run));
            //sortThreads[i].Start(ints[i]);
            sortThreads[i] = new Thread(new ThreadStart(delegate { run(ints[i]); }));
            sortThreads[i].Start();

        }
    }


    private void run(int ms)
    {
        try
        {
            Thread.Sleep(ms * 1000 + 10);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

        Console.WriteLine(ms);
    }
还没有人回应!

您的回应

你还未登陆,不能回应!登陆