首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于Task批量动态定义的有关问题

2013-09-05 
关于Task批量动态定义的问题DirectoryInfo Di new DirectoryInfo(LibPath)DirectoryInfo[] directory

关于Task批量动态定义的问题


            DirectoryInfo Di = new DirectoryInfo(LibPath);
            DirectoryInfo[] directory = Di.GetDirectories();
            int LibNo = directory.Length;
            Task<DataTable>[] ts = new Task<DataTable>[LibNo];
            for (int i = 0; i < LibNo; ++i)
            {
                ts[i] = Task.Factory.StartNew(() => Single_Lib(directory[i]));
            }
            Task.WaitAll(ts);

有这么一段代码,是想在路径“LibPath”中获取文件夹数,即库文件夹的数量LibNo,然后开启LibNo个Task线程,使用上面代码的时候,运行到最后一行Task.WaitAll(ts)时,会出现第7行”directory[i]索引超出了数组界限“的错误。
把for循环部分改为:

            if (LibNo >= 5)
            {
                ts[0] = Task.Factory.StartNew(() => Single_Lib(directory[0]));
                ts[1] = Task.Factory.StartNew(() => Single_Lib(directory[1]));
                ts[2] = Task.Factory.StartNew(() => Single_Lib(directory[2]));
                ts[3] = Task.Factory.StartNew(() => Single_Lib(directory[3]));
                ts[4] = Task.Factory.StartNew(() => Single_Lib(directory[4]));
            }
            if (LibNo >= 6)
                ts[5] = Task.Factory.StartNew(() => Single_Lib(directory[5]));
            if (LibNo >= 7)
                ts[6] = Task.Factory.StartNew(() => Single_Lib(directory[6]));


            if (LibNo >= 8)
                ts[7] = Task.Factory.StartNew(() => Single_Lib(directory[7]));


就可以实现预期功能,哪位能给解释下,上边的代码为什么会出现那种错误,应该做何修改,能够动态判断LibNo的数量,精简代码。 Task?线程?C#
[解决办法]

            for (int i = 0; i < LibNo; ++i)
            {
                ts[i] = Task.Factory.StartNew(() => Single_Lib(directory[i]));
            }

=》

            for (int i = 0; i < LibNo; ++i)
            {
                int index = i;
                ts[i] = Task.Factory.StartNew(() => Single_Lib(directory[index]));
            }

[解决办法]
阿非是正解。

这个问题很类似我在 http://bbs.csdn.net/topics/380240169 中讨论的那个问题。

热点排行