2 dav0913 dav0913 于 2013.07.31 16:35 提问

C#版关于之前看到的睡眠排序

之前看别人的博客看到这个排序方法,就拿来试了下,
因为要给线程传递参数我先用了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);
    }
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!