powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема с потоками
25 сообщений из 60, страница 1 из 3
Проблема с потоками
    #39643661
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, как продолжить выполнения кода после завершения потока BackgroundWorker:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
  private void button1_Click(object sender, EventArgs e)
        {
            
            bw = new BackgroundWorker();
            bw.DoWork += (obj, ea) => TasksAsync(1);
            bw.RunWorkerAsync();
            //здесь подождать пока не выполнится поток
/////продолжить выполнение кода, ниже код
        }
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643666
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11,
вам советовали Async\Await и свежие технологии по потокам.
Игнорируете?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643674
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
не могу в них разобраться, а это работает
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643676
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М-да, отличный аргумент.
При этом с BackgroundWorker вы тоже не можете разобраться.
Какой смысл грызть кактус?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643677
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11не могу в них разобраться
ничего сложного. Ты не пытался

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
private Task MyAsync()
{
	return Task.Run(() =>
		{
			// код в потоке
			...
		}
		);
}

ButtonsClick()
{
	await MyAsync();
}
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643680
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
там я уже разобрался, просто через this.Invoke((Action)delegate передаю значения прогресс бару.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643681
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123OlegEgorov11не могу в них разобраться
ничего сложного. Ты не пытался

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
private Task MyAsync()
{
	return Task.Run(() =>
		{
			// код в потоке
			...
		}
		);
}

ButtonsClick()
{
	await MyAsync();
}



В private Task MyAsync() я объявляю код, а по нажатию кнопки пишу:

Код: c#
1.
2.
3.
4.
5.
 private void button1_Click(object sender, EventArgs e)
        {
            MyAsync();
            await MyAsync();
        }


Или где нужно объявлять этот await?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643682
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, мне не понятно что делать с await. Как-бы с BackgroundWorker у меня все работает все как нужно, ну чтобы форма не висла и прогресс бары заполнялись, но студия мне пишет, что не плохо бы было ввести await, я не могу понять как его использовать.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643683
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11Shocker.Pro, мне не понятно что делать с await. Как-бы с BackgroundWorker у меня все работает все как нужно, ну чтобы форма не висла и прогресс бары заполнялись, но студия мне пишет, что не плохо бы было ввести await, я не могу понять как его использовать.

Продолжайте использовать BackgroundWorker.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643684
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OlegEgorov11, я понял свою ошибку, и сделал так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
       private ASYNC void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Style = ProgressBarStyle.Marquee;
            progressBar1.MarqueeAnimationSpeed = 30;
            MyAsync();
            await MyAsync();
            progressBar1.Style = ProgressBarStyle.Continuous;
            progressBar1.MarqueeAnimationSpeed = 0;
        }
    }
}


я не добавил ключевое слово async кнопке, теперь работает как я и хотел, но он выполняется два раза, почему?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643685
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11В private Task MyAsync() я объявляю код,
код писать в месте где мой комментарий // код в потоке
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643686
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,
почему? я же хочу научиться
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643688
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11а по нажатию кнопки пишу:

Код: c#
1.
2.
3.
4.
5.
 private void button1_Click(object sender, EventArgs e)
        {
            MyAsync();
            await MyAsync();
        }


нет. Как у меня выше.

OlegEgorov11Или где нужно объявлять этот await?
я вам уже всё написал. Только вставить код где мой коммент и повесить на стену в рамочку))
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643690
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11но он выполняется два раза, почему?
в ButtonClick()
должна быть только одна строка:
await MyAsync();
больше ничего.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643691
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123, но это же так не работает...
пишет 2 ошибки, 1 на ButtonsClick() - метод должен иметь тип возвращаемого значения, 2 - на await, что он должен использоваться только с Async
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643692
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OlegEgorov11, Большое спасибо, так работает:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
namespace WindowsFormsApplication12
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            progress();
        }

        private void progress()
        {
            progressBar1.Style = ProgressBarStyle.Continuous;
            progressBar1.MarqueeAnimationSpeed = 0;
        }
   private Task MyAsync()
{
	return Task.Run(() =>
		{
			  ProcessStartInfo psi;
                psi = new ProcessStartInfo("cmd", @"/c echo hello word" + "&" + "pause");
                Process.Start(psi).WaitForExit();
		});
		
}
               
        private async void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Style = ProgressBarStyle.Marquee;
            progressBar1.MarqueeAnimationSpeed = 30;
          await MyAsync();
            progressBar1.Style = ProgressBarStyle.Continuous;
            progressBar1.MarqueeAnimationSpeed = 0;
        }
    }
}
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643693
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11hVostt,
почему? я же хочу научиться

чему научиться? async/await имеет смысл использовать для асинхронных IO операций, запись/чтение файлов, обращения к БД (в том случае, если провайдер баз данных поддерживает асинхронный АПИ, например, провайдеры оракла не умеют).

если заворачиваете что-то в async/await, значит ВСЁ внутри должно следовать этому паттерну. поэтому сегодня многие современные программы пишут в стиле async-first.

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

от BackgroundWorker-а отказываться не стоит, он прекрасно решает свою задачу.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643694
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123в ButtonClick()
должна быть только одна строка:
await MyAsync();
больше ничего.

такие советы как мёртвому припарка. человеку надо идти и доку курить, читать книжки, а не вставить await без малейшего понимания что он сделал. в формате форума этому не научить.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643695
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11
Код: c#
1.
2.
3.
4.
5.
6.
return Task.Run(() =>
		{
			  ProcessStartInfo psi;
                psi = new ProcessStartInfo("cmd", @"/c echo hello word" + "&" + "pause");
                Process.Start(psi).WaitForExit();
		});



вот зачем человека фигне научили?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643697
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11на await, что он должен использоваться только с Async
да
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
private async void MyRun()
{
	await MyAsync();
}

private Task MyAsync()
{
	return Task.Run(() =>
		{
			// код в потоке
			...
		}
		);
}

ButtonsClick()
{
	MyRun();
}
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643699
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, вообще у меня почти готовая программа, которая по нажатию кнопки создает в sql таблицы, наполняет их и выгружает в файл. У меня проблема была с зависанием формы, мне необходимо было сделать чтобы прогресс бар один бегал, второй заполнялся по значениям которые я ему присваиваю. Вот тот который бегает, не бегал, так как форма зависала. Вы говорите, что с BackgroundWorker в принципе можно решить эту проблему?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643701
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttвот зачем человека фигне научили?
это hello world за 3 минуты и просто для понимания.
Что и сделал MS супротив Java своим await .
..
Если получится в три минуты и просто рассказать почему фигня, то велкам.
Думаю, не получится.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643702
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttasync/await имеет смысл использовать для асинхронных IO операций, запись/чтение файлов, обращения к БД (в том случае, если провайдер баз данных поддерживает асинхронный АПИ, например, провайдеры оракла не умеют).
у меня работает и не в том случае. Когда нет поддержки никем ниже. Это обычный поток.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643703
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, что неверно заставлять человека сразу разбираться в async\await, тем более, что это по сути только сахар для TPL.
В первую очередь нужно разобраться, что такое TPL, как работать с Task'ами, что такое асинхронное выполнение, почему асинхронное выполнение не равно многопоточному.
Затем разобраться с синхронизацией в многопоточных приложениях, мониторы, симафоры, Read\Write локеры и прочие способы.
А потом уже переходить к async\await, иначе последний будет крайне непонятным. Если человек использует await, но не понимает, как это работает, что происходит после указания этого ключевого слова, будет много боли.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643704
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
в принципе, async\awaite проще писать чем BackgroundWorker, я попробовал передать данные двум прогресс барам и у меня все получилось так как я хотел. Но еще один вопрос, когда я искал информацию по потокам, то где то видел что для async\awaite необходим net framework 4.5 и выше, так ли это?
...
Рейтинг: 0 / 0
25 сообщений из 60, страница 1 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема с потоками
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]