.NET 4.x Завершение потоков если переменная равна 0 - C#
Формулировка задачи:
В общем, при нажатии на кнопку, у меня создается колличество потоков которое указанно в textbox.
Вот в общем код кнопки
Вот метод Worcher с для которого создаются потоки
А вот а вот сам Checker
\
А вот сюда загружается база
Базы загружаются в listing.
Я делаю так как снизу, то не работает
Помогите сделать правила при котором если в базе кончились строки, то потоки завершаются.
И так же куда это добавлять.
private void button1_Click_1(object sender, EventArgs e)
{
site = true;
Listing.threadList.Clear();
for (int thrcount = 0; thrcount < countThreads.Value; thrcount++)
{
Thread th = new Thread(Worcher);
Listing.threadList.Add(th);
th.Start();
}
}private void Worcher()
{
while (site)
{
try
{
string acc = string.Empty;
string login = string.Empty;
string pass = string.Empty;
string nick = string.Empty;
lock (lockers)
{
if (Listing.tempbase.Count > 0)
{
acc = Listing.tempbase[0];
Listing.tempbase.RemoveAt(0);
}
else
{
site = false;
return;
}
}
if (string.IsNullOrEmpty(acc))
{
Thread.Sleep(900);
continue;
}
if (acc.Contains(";"))
{
login = acc.Split(';')[0].Trim();
pass = acc.Split(';')[1].Trim();
nick = login.Split('@')[0].Trim();
}
if (acc.Contains(":"))
{
login = acc.Split(':')[0].Trim();
pass = acc.Split(':')[1].Trim();
nick = login.Split('@')[0].Trim();
}
// if(pass.Length < 6)
// {
// DataResult("error", login + ":" + pass); // На случий если нужно будет сортировать пароли по длине .
// continue;
// }
Checker(nick, HttpUtility.UrlEncode(login), HttpUtility.UrlEncode(pass));
}
catch { continue; }
}
}private void Checker(string nick, string login, string pass)
{
string device = textBox3.Text;
using (var request = new xNet.HttpRequest())
{
if (proxy_type.Text == "HTTP/s")
request.Proxy = HttpProxyClient.Parse(GetProxy());
if (proxy_type.Text == "SOCKS-4")
request.Proxy = Socks4ProxyClient.Parse(GetProxy());
if (proxy_type.Text == "SOCKS-5")
request.Proxy = Socks5ProxyClient.Parse(GetProxy());
request.Cookies = new CookieDictionary();
request.ConnectTimeout = (int)countTime.Value * 1000;
request.UserAgent = "Dalvik/1.6.0 (Linux; U; Android 4.4.2; VMware Virtual Platform Build/KVT49L)";
request.AllowAutoRedirect = false;
string connect = request.Post("тут сайт", "тут пост данные", "application/x-www-form-urlencoded").ToString();
if (connect.Contains("secauth"))
{
DataResult("good", login + ":" + pass);
}
if (connect.Contains("invalid"))
{
DataResult("bad", login + ":" + pass);
}
}
}private void button1_Click(object sender, EventArgs e)
{
using (OpenFileDialog dialog = new OpenFileDialog()) // создание нового OpenFileDialog
{
dialog.Filter = "Текстовые файлы|*.txt"; // отображение файлов с расширением .txt
if (dialog.ShowDialog() == DialogResult.OK) // если выбираем файл и нажимаем кнопку ОК
{
Listing.tempbase.Clear();
Listing.tempbase.AddRange(File.ReadAllLines(dialog.FileName));
tempBase = File.ReadAllText(dialog.FileName).Replace(";", ":");
open_basa.Text = "Строк: " + Listing.tempbase.Count.ToString();
int k = tempBase.Split('\n').Count();
int i = 0;
{
Array.Resize(ref baza, i + 1);
baza[i] = tempBase;
i++;
}
countLines = k;
progressBar.Maximum = Listing.tempbase.Count;
progressBar.SuperscriptText = Listing.tempbase.Count.ToString();
linkLabel2.Text = countLines.ToString();
}
}
}private void Worcher()
if (Listing.tempbase.Count() == 0)
{
site = false;
foreach (Thread thread in Listing.threadList)
{
thread.Abort();
}
}
{
while (site)
{
try
{
string acc = string.Empty;
string login = string.Empty;
string pass = string.Empty;
string nick = string.Empty;
lock (lockers)
{
if (Listing.tempbase.Count > 0)
{
acc = Listing.tempbase[0];
Listing.tempbase.RemoveAt(0);
}
else
{
site = false;
return;
}
}
if (string.IsNullOrEmpty(acc))
{
Thread.Sleep(900);
continue;
}
if (acc.Contains(";"))
{
login = acc.Split(';')[0].Trim();
pass = acc.Split(';')[1].Trim();
nick = login.Split('@')[0].Trim();
}
if (acc.Contains(":"))
{
login = acc.Split(':')[0].Trim();
pass = acc.Split(':')[1].Trim();
nick = login.Split('@')[0].Trim();
}
// if(pass.Length < 6)
// {
// DataResult("error", login + ":" + pass); // На случий если нужно будет сортировать пароли по длине .
// continue;
// }
Checker(nick, HttpUtility.UrlEncode(login), HttpUtility.UrlEncode(pass));
}
catch { continue; }
}
}Решение задачи: «.NET 4.x Завершение потоков если переменная равна 0»
textual
Листинг программы
Thread th = new Thread(new ParameterizedThreadStart(Worcher));