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