2016-06-20 18 views
0

Hilfe ist sehr willkommen und sehr dankbar, danke. Was dieses Programm ist, ist ein ProxyChecker, weil ich eine Menge gekauft habe und weiterhin Proxies mit verschiedenen Usern/Pässen etc. machen werde, einige sind jedoch abgelaufen. Ich habe einen Unterbrechungspunkt hinzugefügt und was es tut, ist, den ProxyClient-Code zu überspringen und direkt zu jedem var-Element in 1 zu gehen, wenn das Element eine Verbindung usw. akzeptiert, dann gibt es nur false zurück und wird beendet.C# Threading parallel Ausgabe

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"); 
    } 
} 

laden ips Funktion: #

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 }); 
       } 
      } 
     } 

ich dies auf die Antwort in Reaktion hinzugefügt haben. Ich glaube, das ist ein variables Problem, da die Variable lokal nicht öffentlich erklärt wird. Ich bin nicht in der Lage, einen Weg zu finden, diese Arbeit scheint, als ob ich dumm bin. Vielen Dank.

Antwort

1

Das Problem ist in diesen beiden Linien:

var l = new List<MyIP>(); 
Parallel.ForEach(l.ToArray(), (ip_item) => 

Sie gerade darin keine Elemente l als eine neue Liste erstellt. Wenn Sie ToArray() aufrufen, erhalten Sie ein leeres Array. Wenn Parallel.ForEach ein leeres Array sieht, wird es einfach übersprungen, da nichts zu iterieren ist.

+0

habe Updater meinen Code danke! – csharpnoobie