List<string> list=new List<string();
 一个list里面放很多图片地址。如http://a.jpg如何使用多线和完成下载 现在我是不知道如何控制不下载重复使用lock答不到我要求啊
            while (i < list.Count)//如果是两个线程,一访问都可能是0
            {
                Debug.WriteLine(i.ToString()+"--"+Thread.CurrentThread.Name);
                lock (_cc)
                {
                    url= list[i++];
                }
Download(url);//这里下载的时候,会有延迟!!!所以需要多个线程来做,又不下载重复
            }

解决方案 »

  1.   


                while (i < list.Count)//如果是两个线程,一访问都可能是0
                {
                    Debug.WriteLine(i.ToString()+"--"+Thread.CurrentThread.Name);
                    lock (_cc)
                    {
                        url= list[i++];
                    }
    Download(url);//这里下载的时候,会有延迟!!!所以需要多个线程来做,又不下载重复
                }//DownLoad()函数中创建线程,用线程去下载就好了;
      

  2.   


       public void start() {
                DataRow row = null;            while (!completed)
                {
                    lock (_cc)
                    {
                        Debug.WriteLine(i.ToString() + "--" + Thread.CurrentThread.Name);
                        if (i == Table.Rows.Count)
                        {
                            completed = true;
                            break ;
                        }
                        row = Table.Rows[i++];
                    }
                    if (row == null)
                        return;
                    message(row["Item_Code"] as string, row["Url"] as string, GetHtml(row["Url"] as string),i);
                }
            }加了一个变量完成了虽然不怎么好。希望对以后的有人用吧。
      

  3.   

    线程里面锁定
    while (list.Count > 0)
    {
    取出最后一条URL
    从list中移除最后一条URL
    解锁下载URL
    }
      

  4.   


    谢谢你,不过我一个list有1000张图片,那我不是得弄1000个线程吗?
    谁知道可以使用Thread.Pool完成我的问题吗?
      

  5.   

    多线程下载的函数只接收url并下载,主线程负责调度~
    或者每下载一个,就从列表里把这条去掉,放到另一个列表里
      

  6.   


    谢谢,我知道,但是我只想用两个new thread,然后他们在while中跑起来,拿到最后一个为止!!!
      

  7.   

    每个线程循环从List中取图片地址(获取并从List移除),直到List为空结束循环。访问List时加锁即可。