Многопоточность Thread. Кодеры C# хелпаните

  • На форуме работает ручное одобрение пользователей. Это значит, что, если Ваша причина регистрации не соответствует тематике форума, а также Вы используете временную почту, Ваша учётная запись будет отклонена без возможности повторной регистрации. В дальнейшем - пожизненная блокировка обоих аккаунтов за создание мультиаккаунта.
  • Мы обновили Tor зеркало до v3!
    Для входа используйте следующий url: darkv3nw2...bzad.onion/
  • Мы вновь вернули telegram чат форуму, вступайте, общайтесь, задавайте любые вопросы как администрации, так и пользователям!
    Ссылка: https://t.me/chat_dark_time

fortek

Продавец

fortek

Продавец
29 Апр 2016
247
69
Вообщем суть проблемы, в C# на выполнение программы по нажатию кнопки надо чтобы выполнялось несколько действий, то что нашел в гугле - используется sleep - немного не то. Действия должны выполняться одновременно.

Код:
        private void startNakrutka_Click(object sender, EventArgs e)
        {
            try
            {
....
             }
                else
                {
...
                    Thread thread = new Thread(new ThreadStart (this.Поток1));
                    thread.Start();
                }
            }
Т.е вот пример - кнопку нажимаю - выполняется Поток1:

Код:
 public void Поток1()
{
...
}
Мне надо чтобы выполнялось еще 2 потока без слипа.

Как мне правильно оформить?
 

fortek

Продавец

fortek

Продавец
29 Апр 2016
247
69
Код:
public void Поток2()
{ ...
}
В коде выполняет метод который я выше написал что это поток1.
Как сделать так чтобы параллельно выполнялся 2-ой метод, т.е. поток2.

Не пинай сильно))
 
12 Сен 2015
105
93
Код:
 Thread thread = new Thread(new ThreadStart (this.Поток1)); thread.Start();

Thread thread1 = new Thread(new ThreadStart (this.Поток2)); thread1.Start();

//выполняться они будут практически одновременно
 
  • Лайк
Reactions: fortek

fortek

Продавец

fortek

Продавец
29 Апр 2016
247
69
Код:
 Thread thread = new Thread(new ThreadStart (this.Поток1)); thread.Start();

Thread thread1 = new Thread(new ThreadStart (this.Поток2)); thread1.Start();

//выполняться они будут практически одновременно
Банально просто, детсад прям)) спасибо.

Последний вопрос, последний...

Я нажимаю кнопку и по идее должен запускаться метод, НО:

Код:
private void startNakrutka_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart (this.Potok1));
}
Метод Potok1 у меня объявлен так:

Код:
 private void Potok1(object sender, EventArgs e)
{

}
При компиляции вылезает такая тема:

Ошибка CS0123 Нет перегруженного метода для "Potok1", который соответствует делегату "ThreadStart".

Что делать?
 

fortek

Продавец

fortek

Продавец
29 Апр 2016
247
69
Potok1 - кнопка?
или нахуя ты в скобки эту поебень влепил?
Potok1 - не кнопка, а метод.

Дык определение для метода если убрать и оставить как

Код:
private void Potok1()
То начнет ругаться связанный с ним метод таймера.

Код:
        internal virtual void vmethod_3(System.Windows.Forms.Timer WithEventsValue)
        {
            EventHandler value = new EventHandler(this.Potok1); - ошибка
            if (this.timer_1 != null)
            {
                this.timer_1.Tick -= value;
            }
            this.timer_1 = WithEventsValue;
            if (this.timer_1 != null)
            {
                this.timer_1.Tick += value;
            }
        }
Нет перегруженного метода для "Potok1", который соответствует делегату "EventHandler".
 
12 Сен 2015
105
93
Potok1 - не кнопка, а метод.

Дык определение для метода если убрать и оставить как

Код:
private void Potok1()
То начнет ругаться связанный с ним метод таймера.

Код:
        internal virtual void vmethod_3(System.Windows.Forms.Timer WithEventsValue)
        {
            EventHandler value = new EventHandler(this.Potok1); - ошибка
            if (this.timer_1 != null)
            {
                this.timer_1.Tick -= value;
            }
            this.timer_1 = WithEventsValue;
            if (this.timer_1 != null)
            {
                this.timer_1.Tick += value;
            }
        }
Нет перегруженного метода для "Potok1", который соответствует делегату "EventHandler".
хмм... странно, должно было работать без проблем.
 

iPro

Участник

iPro

Участник
12 Окт 2016
1
1
Моя вторая профессия - археолог, поэтому - Thread для таких целей не подходит, он неудобен. Давным-давно в C# добавили Task и async/await'ы которые по сути своей являются удобной оберткой над низкоуровневым Thread'ом

Код:
private async Task MyThreadedMethod(){
     await Task.Run(() => {
           // Многопоточный код
     });
}
Ну и вызов тоже прост - в любом async методе
Код:
await MyThreadedMethod();
Плюс можно запустить одновременно несколько разных задач и дожидаться их завершения (можно и не дожидаться)
Код:
await Task.WhenAll(MyThreadedMethod1, MyThreadedMethod2);
Либо запускать их по очереди, друг за дружкой
Код:
await MyThreadedMethod1();
await MyThreadedMethod2();
В любом случае стоит запомнить что если есть оператор await или его нет, то в синхронном коде все будет выполнятся последовательно, но без всяких подвисаний, т.к. задача выполняется в другом потоке. Отличие лишь в том - будет ли метод дожидаться окончания работы таска
 
  • Лайк
Reactions: turissssst

The

Участник

The

Участник
3 Авг 2016
147
64
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

GM`ka

Ненадежный

GM`ka

Ненадежный
13 Сен 2015
294
157
Моя вторая профессия - археолог, поэтому - Thread для таких целей не подходит, он неудобен. Давным-давно в C# добавили Task и async/await'ы которые по сути своей являются удобной оберткой над низкоуровневым Thread'ом

Код:
private async Task MyThreadedMethod(){
     await Task.Run(() => {
           // Многопоточный код
     });
}
Ну и вызов тоже прост - в любом async методе
Код:
await MyThreadedMethod();
Плюс можно запустить одновременно несколько разных задач и дожидаться их завершения (можно и не дожидаться)
Код:
await Task.WhenAll(MyThreadedMethod1, MyThreadedMethod2);
Либо запускать их по очереди, друг за дружкой
Код:
await MyThreadedMethod1();
await MyThreadedMethod2();
В любом случае стоит запомнить что если есть оператор await или его нет, то в синхронном коде все будет выполнятся последовательно, но без всяких подвисаний, т.к. задача выполняется в другом потоке. Отличие лишь в том - будет ли метод дожидаться окончания работы таска
ох ты ж ни хуя сам iPro
 
  • Лайк
Reactions: turissssst and genz

О нас

  • Наше сообщество существует уже много лет и гордится тем, что предлагает непредвзятое, критическое обсуждение различных тем среди людей разных слоев общества. Мы работаем каждый день, чтобы убедиться, что наше сообщество является одним из лучших.

    Dark-Time 2015 - 2024

    При поддержке: XenForo.Info

Быстрая навигация

Меню пользователя