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

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

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

В общем, при нажатии на кнопку, у меня создается колличество потоков которое указанно в textbox. Вот в общем код кнопки
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();
                }
        }
Вот метод Worcher с для которого создаются потоки
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; }
            }
        }
А вот а вот сам Checker
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();
                }
            }
        }
Базы загружаются в listing. Я делаю так как снизу, то не работает
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));

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

14   голосов , оценка 3.643 из 5
Похожие ответы