日期:2014-05-17  浏览次数:20983 次

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);
    }
C# 线程

------解决方案--------------------
sortThreads[i] = new Thread(new ThreadStart(delegate { run(ints[i]); }));