Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 41

Как заставить поток ожидать любого события?

01.12.2019, 15:21. Показов 2399. Ответов 2

Студворк — интернет-сервис помощи студентам
Делаю класс по гайду с msdn вот.
Но немного переделал, так что бы было похоже на BackgroundWorker.
По факту есть события:
C#
1
2
3
public event EventHandler DoWork;
        public event EventHandler RunWorkerCompleted;
        public event EventHandler ProgressChanged;
На DoWork, мы подписываем метод нашей работы. На остальные два метода обработчика.
Суть проблемы: Этот класс я вызываю с консольного приложения(для теста), и чтобы оно не закрылось в конце стоит ReadLine(). Из-за этого обработка событий RunWorkerCompleted и ProgressChanged(Вызываемые с помощью AsyncOperation.Post)
Начинается в еще одном потоке. Если делать без AsyncOperation то обработка событий происходит в рабочем потоке.
Вопросы:
1) Можно ли консольное приложение заставить ждать какое-нибудь из тех трёх событий? Например как Форма из WinForms ждёт событий.
2) Как генерировать события в определенном потоке, например в основном?

Ссылка на проекты google.Drive : вот
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.12.2019, 15:21
Ответы с готовыми решениями:

Остановить и продолжить выполнение метода. Общий поток при этом должен ожидать
Всем привет! Есть метод 1, который выполняется и останавливается в процессе, затем выполняется метод 2, когда он завершается, то...

Как заставить один поток ждать, пока работает другой
Здравствуйте, стоит такая задача: есть public static bool forks = new bool;// false - свободна public void takeFirstSpoon(int...

Как остановить главный поток до момента выполнения определенного события?
Подскажите как остановить главный поток до момента выполнения определенного события?

2
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
01.12.2019, 15:32
Лучший ответ Сообщение было отмечено Artemidas как решение

Решение

Цитата Сообщение от Artemidas Посмотреть сообщение
Можно ли консольное приложение заставить ждать какое-нибудь из тех трёх событий?
Можно. Например ManualResetEvent, ManualResetEventSlim
Цитата Сообщение от Artemidas Посмотреть сообщение
Например как Форма из WinForms ждёт событий.
Форма по другому работает. Там очередь сообщений, в консоли её нет.

Цитата Сообщение от Artemidas Посмотреть сообщение
Как генерировать события в определенном потоке, например в основном?
Например сохранив при создании класса текущий SynchronizationContext и затем вызывая соотвествующие методы у контекста.
1
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 41
01.12.2019, 16:42  [ТС]
Там ссылка неверная на проект вот лучше

Добавлено через 1 час 7 минут
Цитата Сообщение от Someone007 Посмотреть сообщение
Форма по другому работает. Там очередь сообщений, в консоли её нет.
А не подскажите разницу между консолью и формой,на тот случай если я захочу сделать приложение наподобие WinForms?
Ну или ресурс какой-нибудь. Беглый смотр msdn подробностей не рассекретил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.12.2019, 16:42
Помогаю со студенческими работами здесь

Ожидать наступление события
Выполняется метод(Проверка правильности расстановки компонентов по форме). Необходимо приостановить выполнение метода до наступления...

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

Программа "Торпедная атака": Как заставить программу всё время цикла "Корабль" ожидать нажатия клавиши
Задача : по х кординате на экране движется корабль. При нажатии клавиши "F" запускается торпеда, которая попадёт или не попадёт в данный...

Как заставить поток ждать в некоторых ситуациях
Есть такой сценарий приложения: Приложение до запуска TCP кеширует данные из MySQL в std::vector, далее запускается TCP и ожидаются...

Как заставить новый поток писать в консоль?
Есть оконная прога она запускает поток: DWORD WINAPI ConsoleThread(PVOID) { wchar_t *some_string=L"New thread!"; const wchar_t...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 09.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 31.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru