2016-06-21 46 views
-1

帮助非常欢迎和非常感谢,谢谢。这个程序是一个ProxyChecker,因为我已经买了一大堆,并且会继续使用不同的用户/通行证等代理,但有些已经过期。我添加了一个断点,它所做的实际上是跳过ProxyClient代码并直接转向1中的每个var item,如果item接受连接等,则它只返回false并结束。C#线程并行

private static void CheckProxy(object state) 
{ 
    var u = user[0]; 
    var p = pass[0]; 
    var l = new List<MyIP>(); 
    Parallel.ForEach(l.ToArray(), (ip_item) => 
    { 
     try 
     { 
      string ip = ip_item.IP; 
      using (var client = new ProxyClient(ip, u, p)) 
      { 
       Console.WriteLine(ip, user, pass); 
       client.Connect(); 
       ip_item.AcceptsConnection = client.IsConnected; 
      } 
     } 
     catch 
     { 
      l.Remove(ip_item); 
     } 
    }); 
    foreach (var item in l) 
    { 
     if (item.AcceptsConnection == true) 
     { 
      WriteToFile(user[0], pass[0]); 
     } 
     Console.WriteLine(item.IP + " is " + (item.AcceptsConnection) + " accepts connections" + " doesn not accept connections"); 
    } 
} 

负载IPS功能:#

private static void loadips() 
     { 
      using (TextReader tr = new StreamReader("ips.txt")) 
      { 
       var l = new List<MyIP>(); 
       string line = null; 
       while ((line = tr.ReadLine()) != null) 
       { 
        l.Add(new MyIP { IP = line }); 
       } 
      } 
     } 

我已经响应了答案补充这一点。我认为这是一个可变的问题,因为变量在本地声明不公开任何想法如何解决?我无法找到一种方法来获得这种工作,似乎我是愚蠢的。谢谢。

+0

你永远不会调用loadips () – Rick

回答

0

您的代码“跳过”了Parallel.ForEach因为当地变量l列表(你只是new List<MyIP>()创建它。

loadips()方法仅填充只(另一种参考列表)本地变量l,当using块剩下时,这是超出范围

有几种方法可以解决,如果两种方法都在如果您是同一个班级,则可以在List<MyIP>类别的该班级中声明成员变量,并在您的loadips()中填写该列表。

我的建议是要改变loadips()使其回报读取IP地址的列表,并把这种从CheckProxy()

private static List<MyIP> loadips() // changed return type to List<MyIP> 
{ 
    using (TextReader tr = new StreamReader("ips.txt")) 
    { 
     var l = new List<MyIP>(); 
     string line = null; 
     while ((line = tr.ReadLine()) != null) 
     { 
      l.Add(new MyIP { IP = line }); 
     } 
     return l; // return the list! 
    } 
} 

CheckProxy

private static void CheckProxy(object state) 
{ 
    var u = user[0]; 
    var p = pass[0]; 
    var l = loadips(); // load IPs here 
    Parallel.ForEach(l.ToArray(), (ip_item) => 
    { 
     ... 
+0

嗨,是否有更多的参数,为每个语句?即Parallel.ForEach(l.ToArray(),(ip_item)&&(l2.ToArray(),(userpass_item)=>? – csharpnoobie