アプリに問題があります。1 スレッドでは問題なく動作しますが、スレッド > 1 に変更すると正しく動作しません。
私は3つのリストを持っています:
List<string> urls = new List<string>();
List<string> passwords = new List<string>();
struct Proxy
{
public static List<string> proxies = new List<string>();
public static string type;
}
そして、すべてのスレッドが最初の URL を取得し、すべてのスレッドが最初のプロキシを取得し、各スレッドがリストから unik(next) パスワードを取得する必要があります。最初の 5 つのスレッドが 5 つのパスワードを受け取る場合、プロキシは次のスレッドに変更され、これらのスレッドは次の 5 つの固有のパスを受け取ります。これを解決するには?
Thread[] thr;
static object locker = new object();
int good_auth, bad_auth, j;
private void button1_Click(object sender, EventArgs e)
{
decimal value = numericUpDown2.Value;
int i = 0;
int k = (int)(value);
thr = new Thread[k];
for (; i < k; i++)
{
thr[i] = new Thread(new ThreadStart(go));
thr[i].IsBackground = true;
thr[i].Start();
}
}
public void go()
{
string urlANDlogin = "";
for (int url_index = 0; url_index < urls.Count; url_index++)
{
urlANDlogin = urls[url_index];
string proxy = "";
string password = "";
if (Proxy.proxies.Count != 0)
{
if (checkBox1.Checked)
Proxy.type = "http";
else if (checkBox2.Checked)
Proxy.type = "socks5";
else
Proxy.type = "none";
}
VB vb = new VB(urlANDlogin, Proxy.type);
for (int proxy_index = 0; proxy_index < Proxy.proxies.Count; proxy_index++)
{
lock (locker)
{
if (Proxy.proxies.Count == 0)
{
break;
}
else
proxy = Proxy.proxies[proxy_index];
}
vb.Proxy(proxy);
for (int i = 0; i < 5; i++)
{
lock (locker)
{
if (passwords.Count == 0)
{
break;
}
else
{
password = passwords[j];
j++;
}
}
string login = vb.Auth(password);
if (login == "Good")
{
lock (locker)
{
good_auth++;
log_good(good_auth);
}
break;
}
else
{
lock (locker)
{
bad_auth++;
log_bad(bad_auth);
}
}
}
lock (locker)
{
log_left_proxy(Proxy.proxies.Count);
j = 0;
}
}
}
}