2016-06-20 15 views
0

ヘルプは大歓迎であり、非常に高く評価されています。ありがとうございます。このプログラムが何であるかは、ProxyCheckerです。なぜなら、私は束を購入していて、異なるユーザー/パスなどでプロキシを引き続き行うためです。しかし、期限切れのものもあります。私はブレークポイントを追加し、実際にはProxyClientコードをスキップして、1の各varアイテムに対してまっすぐに進みます。アイテムが接続などを受け入れると、falseを返して終了します。C#threading parallel issue

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

私は答えに応じて、これを追加しました。私はこれが可変的な問題であると信じています。なぜなら、変数はローカルに宣言されていないからです。私はこの仕事を私がばかげているように見える方法を見つけることができません。ありがとう。

答えて

1

問題は、これらの2つの行にあります。あなたはそれではありませんアイテムを持つ新しいリストとしてリットルを作成

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

。 ToArray()を呼び出すと空の配列が返されます。 Parallel.ForEachが空の配列を見ると、繰り返し処理がないのでスキップされます。

+0

ありがとうございました! – csharpnoobie