首页 新闻 会员 周边

多线程采集问题,大家帮帮忙

0
[已解决问题] 解决于 2010-12-16 09:53
protected void Button2_Click(object sender, EventArgs e)
{
StringBuilder sb
= new StringBuilder();
foreach (string result in ilist)//ilist里面是全部a标签链接的集合
{
string datetime = DateTime.Now.ToString("mmssffff");
Save(result, Server.MapPath(
@"collection/" + datetime + ".html"));
/*
现在文章是可以采集下来,可是只是单线程模式,就是这个采集完才循环获取下一个链接在采集
这里怎么用多线程采集呢?
请高手帮帮忙,指点一下小弟!
*/
}
}

 

蓝丶 sky的主页 蓝丶 sky | 初学一级 | 园豆:6
提问于:2010-11-02 20:25
< >
分享
最佳答案
0

protected static void Button2_Click(object sender, EventArgs e)
{
string rootPath = Server.MapPath(@"collection/");
foreach (string result in ilist)
{
ThreadPool.QueueUserWorkItem(
delegate(object param)
{
string datetime = DateTime.Now.ToString("mmssffff");
Save(result,
string.Concat(rootPath,datetime,".html"));
});
}
}

 

wgz | 小虾三级 |园豆:1254 | 2010-11-02 22:37
还是有点不明白!不过谢谢你的回答!
蓝丶 sky | 园豆:6 (初学一级) | 2010-11-02 22:46
那个object param参数是干麻用的呢
蓝丶 sky | 园豆:6 (初学一级) | 2010-11-02 22:52
使用线程池进行操作,执行的时候需要一个WaitCallback类型的委托实例,这里使用了一个匿名方法,网上关于这方面的资料应该很多的
wgz | 园豆:1254 (小虾三级) | 2010-11-03 12:24
DateTime star = DateTime.Now; StringBuilder sb = new StringBuilder(); foreach (string result in ilist) { ThreadPool.QueueUserWorkItem(delegate(object param) { Save2(result); }); } 改成这样可是采集的时候只采集到18条,没有全部采集完,这是为什么呢?还有端口号也会自动关掉,这是什么原因呢?
蓝丶 sky | 园豆:6 (初学一级) | 2010-11-03 13:36
using System; using System.Threading; namespace demo { class Program { static void Main(string[] args) { Button2_Click(null, null); Console.ReadLine(); } protected static void Button2_Click(object sender, EventArgs e) { string[] ilist = new string[] { "1","2","3","4","5","6","7","8","9" }; foreach (string result in ilist) { ThreadPool.QueueUserWorkItem(new WaitCallback(Execute),result); } } private static void Execute(object param) { Save2((string)param); } private static void Save2(string result) { Console.WriteLine(result); } } } 写的一个非常简单的demo,修改一下差不多的. 有报错吗。多线程的时候要确保你的方法是线程安全的,Save2如果是实例方法的话你要好好查查了
wgz | 园豆:1254 (小虾三级) | 2010-11-03 15:30
其他回答(2)
0

//希望能看明白 

protected void Button2_Click(object sender, EventArgs e) 
         {         
             StringBuilder sb = new StringBuilder();
             Thread td = null;
             foreach (string result in ilist)
              //ilist里面是全部a标签链接的集合    
            {
                     td = new Thread(new ParameterizedThreadStart(Run));
                     td.Start(result);

             } 
         }

//for threading use

 private void Run(object result)
        {
            string datetime = DateTime.Now.ToString("mmssffff");
            Save(result.ToString(), Server.MapPath(@"collection/" + datetime + ".html"));
        }

LoujaDy | 园豆:908 (小虾三级) | 2010-11-03 09:34
0

建议还是从头学习多线程:http://kb.cnblogs.com/page/42528/

Astar | 园豆:40805 (高人七级) | 2010-11-05 06:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册