powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема с потоками
25 сообщений из 60, страница 2 из 3
Проблема с потоками
    #39643705
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes, да ладно Вам, я задал конкретный вопрос, он просто ответил по сути. На примере проще разобраться, я понимаю что awaite приостанавливает выполнение кода до выполнения потока, я просто не мог понять куда его поставить, потому что не присваивал кнопке свойсво async
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643706
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11,

писать то может и проще, но если вы не понимаете, что пишите, это плохая практика.
проще, не всегда лучше. Если вы не понимаете ту или иную технологию, то лучше воспользоваться той, которую вы понимаете.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643707
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesчто это по сути только сахар для TPL

серьёзно? ну это же неправда.


Roman MejtesЗатем разобраться с синхронизацией в многопоточных приложениях, мониторы, симафоры, Read\Write локеры и прочие способы.

стандартное уже классическое клише непонимание разницы между многопоточностью и асинхронность.

приехалит.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643710
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11,

вы не понимаете, как работает await, всё, что могу сказать вам по этому поводу :)
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643711
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11hVostt, вообще у меня почти готовая программа, которая по нажатию кнопки создает в sql таблицы, наполняет их и выгружает в файл. У меня проблема была с зависанием формы, мне необходимо было сделать чтобы прогресс бар один бегал, второй заполнялся по значениям которые я ему присваиваю. Вот тот который бегает, не бегал, так как форма зависала. Вы говорите, что с BackgroundWorker в принципе можно решить эту проблему?

если не собираетесь использовать асинхронный апи (TAP) при работе с СУБД и файлами, то да. вам поможет BackgroundWorker. можно и запускать потоки через Task.Run, но в WinForms есть уже готовые средства, которые решают это задачу и решали ещё 10 лет назад.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643712
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11в принципе, async\awaite проще писать
да. Этого и MS хотел. Чтобы новички не пугались шарп кода))).

OlegEgorov11для async\awaite необходим net framework 4.5
вроде с 2012 года.
Мало?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643713
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Если получится в три минуты и просто рассказать почему фигня, то велкам.
Думаю, не получится.

ты просишь объяснить, почему не нужно забивать гвозди микроскопом, потому что «смотри, как лихо у меня получается». даже стараться не буду.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643716
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes, Проблема в том, что я не первый день только делаю это, а vs работаю вторую неделю, но я быстро учусь
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643717
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttPetro123Если получится в три минуты и просто рассказать почему фигня, то велкам.
Думаю, не получится.

ты просишь объяснить, почему не нужно забивать гвозди микроскопом, потому что «смотри, как лихо у меня получается». даже стараться не буду.
на том и расходимся)
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643718
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttOlegEgorov11hVostt, вообще у меня почти готовая программа, которая по нажатию кнопки создает в sql таблицы, наполняет их и выгружает в файл. У меня проблема была с зависанием формы, мне необходимо было сделать чтобы прогресс бар один бегал, второй заполнялся по значениям которые я ему присваиваю. Вот тот который бегает, не бегал, так как форма зависала. Вы говорите, что с BackgroundWorker в принципе можно решить эту проблему?

если не собираетесь использовать асинхронный апи (TAP) при работе с СУБД и файлами, то да. вам поможет BackgroundWorker. можно и запускать потоки через Task.Run, но в WinForms есть уже готовые средства, которые решают это задачу и решали ещё 10 лет назад.
Ну у меня получается асинхронное, так как выполняются запросы на sql servere? или все таки многопоточное?
Можете объяснить на примере: программа выполняет два sql запроса и выгружает данные в файл? sql запросы и выгрузка выполняются в отдельном потоке, в основном только элементы формы
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643719
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11,

у SqlConnection, SqlCommand и SqlReader'а, которые вы используйте уже есть асинхронные методы поддерживающие шаблон TAP, обычно такой метод оканчивается названием Async
connection.OpenAsync
command.ExeucteReaderAsync
reader.ReadAsync
если все эти методы запускать через await, то проблем и гемороя с созданием каких то там потоков и прочего дерьма у вас не возникнет. просто надо использовать асинхронные методы, а не синхронные. Всё уже готово, самостоятельно городить потоки и прочее нет смысла, так как велосипед уже существует.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643720
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman MejtesOlegEgorov11,

вы не понимаете, как работает await, всё, что могу сказать вам по этому поводу :)
В чем моя ошибка? можете объяснить на примере? или кинуть ссылку по теме? awaite же только приостанавливает выполнение потока, чтобы у программы была возможность подождать значения которое вернет поток, для этого применяем awaite, ведь так же? на пример если в потоке проходят вычисления которые нужны для дальнейшей работы программы, используем awaite и ждем вычислений от потока, продолжаем выполнение программы с данными от потока, я прав?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643721
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman MejtesOlegEgorov11,

у SqlConnection, SqlCommand и SqlReader'а, которые вы используйте уже есть асинхронные методы поддерживающие шаблон TAP, обычно такой метод оканчивается названием Async
connection.OpenAsync
command.ExeucteReaderAsync
reader.ReadAsync
если все эти методы запускать через await, то проблем и гемороя с созданием каких то там потоков и прочего дерьма у вас не возникнет. просто надо использовать асинхронные методы, а не синхронные. Всё уже готово, самостоятельно городить потоки и прочее нет смысла, так как велосипед уже существует.

просто я еще использую утилиты cmd там, не только sql
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643722
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11В чем моя ошибка?
нет у тебя ошибки.
OlegEgorov11так как выполняются запросы на sql servere?
просто есть ещё вариант когда MyAsunc() выше есть прямо в драйвере СУБД.
Тогда вы пишите:

Код: c#
1.
await ДрайверЗапросAsync.Выполнить()
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643723
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman MejtesOlegEgorov11,

у SqlConnection, SqlCommand и SqlReader'а, которые вы используйте уже есть асинхронные методы поддерживающие шаблон TAP, обычно такой метод оканчивается названием Async
connection.OpenAsync
command.ExeucteReaderAsync
reader.ReadAsync
если все эти методы запускать через await, то проблем и гемороя с созданием каких то там потоков и прочего дерьма у вас не возникнет. просто надо использовать асинхронные методы, а не синхронные. Всё уже готово, самостоятельно городить потоки и прочее нет смысла, так как велосипед уже существует.

и там проблема с временными таблицами, нужно чтобы они были в пределах одного коннекта, то есть там наполняется временая таблица потом с ней работает cmd
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643724
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11Ну у меня получается асинхронное, так как выполняются запросы на sql servere? или все таки многопоточное?
Можете объяснить на примере: программа выполняет два sql запроса и выгружает данные в файл? sql запросы и выгрузка выполняются в отдельном потоке, в основном только элементы формы

асинхронное. но нужно, чтобы обращения к БД и записи файлов делались через методы с суффиксом Async. вы не желаете почитать документацию? или хотя бы статейки на хабре?

https://habr.com/post/139734/
https://habr.com/post/261649/
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643725
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttOlegEgorov11Ну у меня получается асинхронное, так как выполняются запросы на sql servere? или все таки многопоточное?
Можете объяснить на примере: программа выполняет два sql запроса и выгружает данные в файл? sql запросы и выгрузка выполняются в отдельном потоке, в основном только элементы формы

асинхронное. но нужно, чтобы обращения к БД и записи файлов делались через методы с суффиксом Async. вы не желаете почитать документацию? или хотя бы статейки на хабре?

https://habr.com/post/139734/
https://habr.com/post/261649/
спасибо за ссылки, обязательно изучу
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643726
OlegEgorov11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,

на сколько я понял из всего вышесказанного я просто могу sql запрос запустить асинхронно, тогда форма не будет виснуть? не в отдельно потоке? но как быть с cmd?
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643729
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11,

асинхронный метод может выполняться и в основном потоке.
У вас есть 2 асинхронных метода, которые вы запустили в 1 STA потоке.
Сперва выполнилось 20% 1 метода, затем 30% второго, затем выполнился код формы (обработка сообщений (ввода), обновление картинки (rendering), потом вернулась к первому и выполнила еще 80%, а потом вернулась ко второму и выполнила еще 70%. Таким образом в 1 потоке, выполнилось 2 метода асинхронно, при этом еще выполнялся код вашей формы, который вроде как и не зависал, но методы выполнялись.
Это если очень по простому описать, как будут выполняться 2 асинхронных метода одновременно в 1 потоке.
Вам будет казаться, что они оба работают, но на самом деле они работаю "по очереди", вытесняя друг друга.

А если вы запустите 2 потока, то они могут выполняться одновременно (при условии наличия 2 процессоров\ядер).
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643730
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, а в синхронном варианте, вы запустили метод 1 и пока он не вернет управление, туда от куда был вызван, выполнение кода формы не будет, то есть обработка сообщений, рендеринг не будут выполняться. Так как будет ожидаться завершение метода. и форма зависнет
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643731
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,
для новичка такое сложное объяснение не подходит. Увы.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643734
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11hVostt,

на сколько я понял из всего вышесказанного я просто могу sql запрос запустить асинхронно, тогда форма не будет виснуть? не в отдельно потоке? но как быть с cmd?
Код: c#
1.
2.
3.
4.
{
RunSQL(); // внутри await  ДрайверЗапросAsync.Выполнить()
await Run_cmd();
}
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643735
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegEgorov11hVostt,

на сколько я понял из всего вышесказанного я просто могу sql запрос запустить асинхронно, тогда форма не будет виснуть? не в отдельно потоке? но как быть с cmd?

Нет, не будет виснуть, так как операция будет выполнена асинхронно. Т.е. пока там БД «думает», основной поток может свободно обрабатывать UI. Отличается от Task.Run это тем, что не расходуется напрасно лишний поток и контексты переключения потоков. Т.е. так правильно. А Task.Run это костыль.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643736
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123
Код: c#
1.
2.
3.
4.
{
RunSQL(); // внутри await  ДрайверЗапросAsync.Выполнить()
await Run_cmd();
}



фигню написал.
...
Рейтинг: 0 / 0
Проблема с потоками
    #39643739
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttPetro123
Код: c#
1.
2.
3.
4.
{
RunSQL(); // внутри await  ДрайверЗапросAsync.Выполнить()
await Run_cmd();
}



фигню написал.
нет. Не фигню. А точно по ТЗ автора топика))
...
Рейтинг: 0 / 0
25 сообщений из 60, страница 2 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема с потоками
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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