2016-06-21 71 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