首页 新闻 会员 周边

请教C#中多程线同时处理一批数据问题

0
悬赏园豆:50 [已解决问题] 解决于 2012-02-26 19:35

本人新手请教一下如果我在C#的窗体模式下编程得到了一组网址,想用几个线程分别去访问这些网址的HTML代码,,,怎么才能让线程操作不重复?

比如:

www.xxxx.com/xxxx1.html

www.xxxx.com/xxxx2.html

www.xxxx.com/xxxx3.html

www.xxxx.com/xxxx4.html

www.xxxx.com/xxxx5.html

www.xxxx.com/xxxx6.html

www.xxxx.com/xxxx7.html

www.xxxx.com/xxxx8.html

www.xxxx.com/xxxx9.html

www.xxxx.com/xxxx10.html

 

如果用3个线程去访问上面的地址,怎么才能不重复操作,最好有个简单且高效的例子谢谢前辈们了

逆乱阴阳的主页 逆乱阴阳 | 初学一级 | 园豆:32
提问于:2012-02-26 17:59
< >
分享
最佳答案
0

假设你有x条网址,你想用n个线程同时操作他们,关键点就是要把x条分成n组。

string[] urls = Enumerable.Range(1, 10).Select(x => "http://www.abc.com/" + x + ".html").ToArray();
//urls里就是你要处理的所有地址,这里我生成了10条测试数据,http://www.abc.com/(1-10).html

int n = 3; //分成3个线程处理

var threads = urls.Select((url, index) => new { Index = index, Url = url })
.GroupBy(a => a.Index % n) //根据模n的结果分组,那么 [1,4,7,10]一组,[2,5,8]一组……
.Select(g => new Thread(() =>
{
foreach (var u in g)
{
Console.WriteLine("Group " + g.Key + " Url: " + u.Url);
//这里我只是简单输出了一下
}
}))
.ToList();

//你要的就在threads变量里,它是一个List<Thread>
foreach (var thread in threads)
{
thread.Start();
}
收获园豆:50
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-02-26 18:21

谢谢朋友这个方法不错。。。。

逆乱阴阳 | 园豆:32 (初学一级) | 2012-02-26 19:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册