.NET 4.x Завершение потоков если переменная равна 0 - C#

Узнай цену своей работы

Формулировка задачи:

В общем, при нажатии на кнопку, у меня создается колличество потоков которое указанно в textbox. Вот в общем код кнопки
Листинг программы
  1. private void button1_Click_1(object sender, EventArgs e)
  2. {
  3. site = true;
  4. Listing.threadList.Clear();
  5. for (int thrcount = 0; thrcount < countThreads.Value; thrcount++)
  6. {
  7. Thread th = new Thread(Worcher);
  8. Listing.threadList.Add(th);
  9. th.Start();
  10. }
  11. }
Вот метод Worcher с для которого создаются потоки
Листинг программы
  1. private void Worcher()
  2. {
  3. while (site)
  4. {
  5. try
  6. {
  7. string acc = string.Empty;
  8. string login = string.Empty;
  9. string pass = string.Empty;
  10. string nick = string.Empty;
  11. lock (lockers)
  12. {
  13. if (Listing.tempbase.Count > 0)
  14. {
  15. acc = Listing.tempbase[0];
  16. Listing.tempbase.RemoveAt(0);
  17. }
  18. else
  19. {
  20. site = false;
  21. return;
  22. }
  23. }
  24. if (string.IsNullOrEmpty(acc))
  25. {
  26. Thread.Sleep(900);
  27. continue;
  28. }
  29. if (acc.Contains(";"))
  30. {
  31. login = acc.Split(';')[0].Trim();
  32. pass = acc.Split(';')[1].Trim();
  33. nick = login.Split('@')[0].Trim();
  34. }
  35. if (acc.Contains(":"))
  36. {
  37. login = acc.Split(':')[0].Trim();
  38. pass = acc.Split(':')[1].Trim();
  39. nick = login.Split('@')[0].Trim();
  40. }
  41. // if(pass.Length < 6)
  42. // {
  43. // DataResult("error", login + ":" + pass); // На случий если нужно будет сортировать пароли по длине .
  44. // continue;
  45. // }
  46. Checker(nick, HttpUtility.UrlEncode(login), HttpUtility.UrlEncode(pass));
  47. }
  48. catch { continue; }
  49. }
  50. }
А вот а вот сам Checker
Листинг программы
  1. private void Checker(string nick, string login, string pass)
  2. {
  3. string device = textBox3.Text;
  4. using (var request = new xNet.HttpRequest())
  5. {
  6. if (proxy_type.Text == "HTTP/s")
  7. request.Proxy = HttpProxyClient.Parse(GetProxy());
  8. if (proxy_type.Text == "SOCKS-4")
  9. request.Proxy = Socks4ProxyClient.Parse(GetProxy());
  10. if (proxy_type.Text == "SOCKS-5")
  11. request.Proxy = Socks5ProxyClient.Parse(GetProxy());
  12. request.Cookies = new CookieDictionary();
  13. request.ConnectTimeout = (int)countTime.Value * 1000;
  14. request.UserAgent = "Dalvik/1.6.0 (Linux; U; Android 4.4.2; VMware Virtual Platform Build/KVT49L)";
  15. request.AllowAutoRedirect = false;
  16. string connect = request.Post("тут сайт", "тут пост данные", "application/x-www-form-urlencoded").ToString();
  17. if (connect.Contains("secauth"))
  18. {
  19. DataResult("good", login + ":" + pass);
  20. }
  21. if (connect.Contains("invalid"))
  22. {
  23. DataResult("bad", login + ":" + pass);
  24. }
  25. }
  26. }
\ А вот сюда загружается база
Листинг программы
  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. using (OpenFileDialog dialog = new OpenFileDialog()) // создание нового OpenFileDialog
  4. {
  5. dialog.Filter = "Текстовые файлы|*.txt"; // отображение файлов с расширением .txt
  6. if (dialog.ShowDialog() == DialogResult.OK) // если выбираем файл и нажимаем кнопку ОК
  7. {
  8. Listing.tempbase.Clear();
  9. Listing.tempbase.AddRange(File.ReadAllLines(dialog.FileName));
  10. tempBase = File.ReadAllText(dialog.FileName).Replace(";", ":");
  11. open_basa.Text = "Строк: " + Listing.tempbase.Count.ToString();
  12. int k = tempBase.Split('\n').Count();
  13. int i = 0;
  14. {
  15. Array.Resize(ref baza, i + 1);
  16. baza[i] = tempBase;
  17. i++;
  18. }
  19. countLines = k;
  20. progressBar.Maximum = Listing.tempbase.Count;
  21. progressBar.SuperscriptText = Listing.tempbase.Count.ToString();
  22. linkLabel2.Text = countLines.ToString();
  23. }
  24. }
  25. }
Базы загружаются в listing. Я делаю так как снизу, то не работает
Листинг программы
  1. private void Worcher()
  2. if (Listing.tempbase.Count() == 0)
  3. {
  4. site = false;
  5. foreach (Thread thread in Listing.threadList)
  6. {
  7. thread.Abort();
  8. }
  9. }
  10. {
  11. while (site)
  12. {
  13. try
  14. {
  15. string acc = string.Empty;
  16. string login = string.Empty;
  17. string pass = string.Empty;
  18. string nick = string.Empty;
  19. lock (lockers)
  20. {
  21. if (Listing.tempbase.Count > 0)
  22. {
  23. acc = Listing.tempbase[0];
  24. Listing.tempbase.RemoveAt(0);
  25. }
  26. else
  27. {
  28. site = false;
  29. return;
  30. }
  31. }
  32. if (string.IsNullOrEmpty(acc))
  33. {
  34. Thread.Sleep(900);
  35. continue;
  36. }
  37. if (acc.Contains(";"))
  38. {
  39. login = acc.Split(';')[0].Trim();
  40. pass = acc.Split(';')[1].Trim();
  41. nick = login.Split('@')[0].Trim();
  42. }
  43. if (acc.Contains(":"))
  44. {
  45. login = acc.Split(':')[0].Trim();
  46. pass = acc.Split(':')[1].Trim();
  47. nick = login.Split('@')[0].Trim();
  48. }
  49. // if(pass.Length < 6)
  50. // {
  51. // DataResult("error", login + ":" + pass); // На случий если нужно будет сортировать пароли по длине .
  52. // continue;
  53. // }
  54. Checker(nick, HttpUtility.UrlEncode(login), HttpUtility.UrlEncode(pass));
  55. }
  56. catch { continue; }
  57. }
  58. }
Помогите сделать правила при котором если в базе кончились строки, то потоки завершаются. И так же куда это добавлять.

Решение задачи: «.NET 4.x Завершение потоков если переменная равна 0»

textual
Листинг программы
  1. Thread th = new Thread(new ParameterizedThreadStart(Worcher));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.643 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы