Как разным потокам передавать разные параметры?

90
20 февраля 2022, 01:00

есть программа эмулирующая работу в браузере, для того чтобы зайти на сайт, нужно ввести логин и пароль. Пароль на всех аккаунтах одинаковый, а логин разный. Я пытаюсь запустить 5 одинаковых потоков, но при этом каждый раз передавать в функцию разный параметр логина. Логин имеет форму "bbb001", "bbb002" и т.д. К сожалению, у меня не получается, надеюсь на вашу помощь.

 static void Main(string[] args)
        {
            Auto auto = new Auto("");
            for (int i = 0; i < 5; i++)
            {
                Thread LogIn = new Thread(new ThreadStart(auto.GoToURL));
                LogIn.Start();
            }
            Console.ReadLine();
        } 
public class Auto
    {
        private string bbb;
        public Auto(string _bbb)
        {
            List<string> log = new List<string>();
            for (int i = 1; i < 5; i++)
            {
                log.Add("bbb" + string.Format("{0:000.#}", i));
            }
            foreach (var k in log)
            {
                this.bbb = _bbb+k;
            }
        }
        public void GoToURL()
        {
            IWebDriver driver = new ChromeDriver();
            driver.Navigate().GoToUrl("https://");
            IWebElement login = driver.FindElement(By.Id("login"));
            login.SendKeys(bbb);
            IWebElement password = driver.FindElement(By.Id("password"));
            password.SendKeys("123456");
            IWebElement come = driver.FindElement(By.Id("submit"));
            come.Click();
            driver.Quit();
        }

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

Answer 1

Вот пример, который должен помочь:

TestClass.cs:

public class TestClass
{
    public int Id { get; set; }
    public string Value { get; set; }
    public TestClass(int id, string value)
    {
        this.Id = id;
        this.Value = value;
    }
    public override string ToString()
    {
        return $"Id: {Id}, Value: {Value}.";
    }
}

Запуск в нескольких потоках:

Enumerable.Range(1, 5).ToList().ForEach(i => {                      // цикл из 5ти элементов
    new Thread(func => {                                            // создаю новый поток с функцией
        TestClass cl = new TestClass(i, (i * 10).ToString());       // в потоке создаю экземпляр класса с итеративной переменной
        Console.WriteLine(cl.ToString());                           // делаю действия с ней (вывожу)
    }).Start();                                                     // запускаю поток
});

Ну и результат:

READ ALSO
Можно пересоздать переменную но с другим типом C#

Можно пересоздать переменную но с другим типом C#

Можно пересоздать переменную но с другим типом C#У меня есть такой код например

232
Как реализовать такой скрипт на jQuery?

Как реализовать такой скрипт на jQuery?

Как с помощью jquery при нажатии на элемент выезжает контент? И как это можно реализовать? Так же еще есть смена контента в зависимости от нажатой...

275
Удаление символов input mask jquery

Удаление символов input mask jquery

Подскажите пожалуйста, как удалять символы из inputСейчас удаляется только последний символ

152
Новый массив из старого (DOM)

Новый массив из старого (DOM)

Есть псевдомассив элементов со страницы, храниться в переменной

153