2016-06-20 2 views
0

도움을 주셔서 감사합니다. 매우 감사 드리며, 감사합니다. 이 프로그램이 무엇인지는 ProxyChecker입니다. 왜냐하면 나는 무리를 사서 다른 사용자/패스 등으로 프록시를 계속 수행 할 것이기 때문에 일부는 만료되었습니다. 내가 중단 점을 추가하고 실제로 ProxyClient 코드를 건너 뛰고 항목이 연결을 허용하면 1의 각 var 항목에 대해 바로가는 것입니다. 그런 다음 false를 반환하고 마칩니다. 내가 대답에 반응이 추가 한C# threading parallel issue

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

# :

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. 변수가 로컬로 선언되어 공개적으로 아이디어를 수정하지 않아서 변수 문제라고 생각합니다. 나는이 일을 얻는 길을 찾을 수 없다. 나는 바보처럼 느껴진다. 감사.

답변

1

문제는이 두 줄에 : 당신은 그냥 항목 없음으로 새로운 목록으로 리터를 만들어

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

. ToArray()를 호출하면 빈 배열이 생깁니다. Parallel.ForEach는 빈 배열을 볼 때 반복 할 것이 없으므로 그냥 건너 뜁니다.

+0

내 업데이트 내 코드 덕분에! – csharpnoobie