Потоки winforms

86
26 августа 2019, 01:20

Как реализовать потоки? я ничего в них не понимаю. Такое выводит:"Не возможно преобразовать из группы методов в ThreadStart"

        Thread t1 = new Thread(button2_Click);
        Thread t2 = new Thread(button2_Click);
        Thread t3 = new Thread(button2_Click);
        Thread t4 = new Thread(button2_Click);
        Thread t5 = new Thread(button2_Click);
        Thread t6 = new Thread(button2_Click);
        Thread t7 = new Thread(button2_Click);
        Thread t8 = new Thread(button2_Click);
        Thread t9 = new Thread(button2_Click);     
private void button2_Click(object sender, EventArgs e)
        {
            t1.Start();
            t2.Start();
            t3.Start();
            t4.Start();
            t5.Start();
            t7.Start();
            t8.Start();
            t6.Start();
            t9.Start();
            string abc = "abcdefghijklmnopqrstuvwxyz";
            string Abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            string a_123 = "1234567890";
            string s = DateTime.Now.ToString("HH dd.MM.yy");
            string err = "//st.prntscr.com/2018/10/13/2048/img/0_173a7b_211be8ff.png";
            string url = "https://prnt.sc/";
            long num = 0;
            if (textBox1.Text == null)
            {
                MessageBox.Show(
        "Вы не ввели значение",
        "Ошибка",
        MessageBoxButtons.OK,
        MessageBoxIcon.Error,
        MessageBoxDefaultButton.Button3,
        MessageBoxOptions.DefaultDesktopOnly);
            }
            else {num = Convert.ToInt64(textBox1.Text);}
            textBox1.MaxLength = 9;
            Directory.CreateDirectory(@".\" + s);
            var i = 0;
            while ((i<num)==true) {
                string prefix = GenRandomString(abc + a_123, 6);
                var w = new WebClient();
                string link = null;
                string userAgentString = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 OPR/57.0.3098.116 (Edition Yx)";
                w.Headers.Add("user-agent", userAgentString);
                var html = w.DownloadString(url+prefix);
                CQ cq = CQ.Create(html);
                foreach (IDomObject obj in cq.Find("img.screenshot-image"))
                    link =  (obj.GetAttribute("src"));
                if (link != null && 
                    String.Equals(link,err)!= true)
                {

                    DirectoryInfo info = new DirectoryInfo(@".\" + s);
                    //var files = info.GetFiles();
                     var Numeri = i + 1;
                    label2.Text = Convert.ToString(Numeri); //files.Length.ToString();
                    label2.Refresh();
                    listBox1.Items.Insert(i, url+prefix);
                    listBox1.SelectedIndex = 0;
                    listBox1.Refresh();
                    w.DownloadFile(link, @".\"+s+ @"\" +prefix+".jpg");
                    i++;
                }
                else
                {
                }
            }
            //w.DownloadFile(@"C:\source.txt", @"C:\destionation.txt");
            //label2.Text = html;
        }
Answer 1

ОМГ, что за жесть я только что увидел? Косяк на косяке...

Теперь по пунктам

  1. Вы создаете N потоков, которые должны запустить метод при активации, а в этом методе вы запускаете одни и те же потоки! Это 100% породит ошибку вида:

ThreadStateException Поток уже запущен.

  1. Вероятно вы хотите запустить не весь метод в отдельном потоке, а какую-то его часть. Так вынесите его в отдельный метод
  2. Зачем иметь миллион полей с потоками, когда можно их хранить в коллекции?
  3. 4.

я ничего в них не понимаю.

Если что-то не знаете, то читайте документацию и задавайте конкретные вопросы.

Это классика! Это знать надо!

Ну и конкретно вот эта ошибка:

Не возможно преобразовать из группы методов в ThreadStart

Cвязана с тем, что ваш метод не удовлетворяет сигнатуре делегата.

Можно обернуть в лямбду и тогда все успешно скомпилиться:

var thread = new Thread(() => button2_Click(null,null));

Однако, вылетит с ошибкой первого пункта, а потом еще и с ошибкой "Нельзя получить с доступ к контролу из другого потока"

READ ALSO
Почему не могу добавить новый внешний ключ?

Почему не могу добавить новый внешний ключ?

yii2, пытаюсь сделать миграцию для добавления внешнего ключа:

98
Зацикливается PHP код

Зацикливается PHP код

Есть ID записи $clients_id Пустой массив который должен запонлится ID-шниками вложенных записей $listId

104
Как получить время 5, 10, 20 или 30 минут назад?

Как получить время 5, 10, 20 или 30 минут назад?

Не могу найти в доках и гугле - как получить время 5, 10, 20 или 30 минут назад?

82
JWT токен - TOKEN_EXPIRED при 2 рефреше

JWT токен - TOKEN_EXPIRED при 2 рефреше

Всем приветПишу API на Laravel, использую пакет tymon/jwt-auth

108