C# многопоточность

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Tereshkov, 23 Jun 2010.

  1. Tereshkov

    Tereshkov Banned

    Joined:
    20 Jun 2010
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Вот есть у меня лист из 300 прокси. Мне нужно прочекать их в 20 потоков.

    Это мне как нужно делать?

    так?
    Code:
    for (int i = 0; i < 20; i++)
    {
        Thread t = new Thread(...);
    }
    
    Тут только нельзя поставить CallBack чтобы к следующей перейти.
    Объясните пожалуйста, как нормально в 50 потоков прочекать и желательно чтобы можно было результат в ProgressBar кидать.
     
  2. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    "объясните" - это когда были попытки решить задачу самостоятельно и возникли какие-то проблемы/ошибки.
    А готовый код можно получить в разделе "О работе".
     
  3. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    поищи тему Algol'a
     
  4. Tereshkov

    Tereshkov Banned

    Joined:
    20 Jun 2010
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Были попытки решить задачи самостоятельно. Привожу свой сорец:
    Code:
            private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                SettingsInfo si = e.Argument as SettingsInfo;
                threads = new List<Thread>();
                while (true)
                {
                    System.Threading.Thread.Sleep(300);
                    bool isContinute = false;
                    foreach (Thread item in threads)
                    {
                        if (item.ThreadState == ThreadState.Running)
                        {
                            isContinute = true;
                            break;
                        }
                    }
                    if (isContinute)
                        continue;
    
                    for (int i = 0; i < si.Threads; i++)
                    {
                        Thread t = new Thread(
                            (ThreadStart)delegate()
                            {
                                Data.CheckProxy(ProxyList[CurrentProxyNum], si.Url, si.TimeOut);
                                //System.Threading.Thread.Sleep(50);
                                if (onEndProcess != null)
                                    onEndProcess();
                            }
                            );
                        t.Start();
                        threads.Add(t);
                        CurrentProxyNum++;
                    }
                }
    Тут получилось не очень удачно. И этот сорец бесполезен и является чистым подобием говнокода, поэтом я и обратился к вам.

    M_script если тебе нужны деньги за решение могу заплатить. Только за идеально правильный вариант.
     
  5. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    многопоточность реализовать можно реализовать разными способами. Банальный способ через for или создавать обьект класса который наследует namespace Thread.