Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
12 / 9 / 4
Регистрация: 25.10.2015
Сообщений: 33
.NET 4.x

Асинхронный void

31.12.2018, 23:59. Показов 1256. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На различных форумах очень часто встречал фразу "void и await не лучшее сочетание". Проблема следующая:
По нажатию на кнопку создаём диалоговое окно для выбора папки, инициализируем объект класса Loader и производим некоторые действия над файлами, однако после строки с await метод запускает задачу и начинает выполняться сначала. В итоге запускается ещё одно диалоговое окно. Как избежать данной проблемы? Метод асинхронный из-за динамического вывода данных по мере выполнения.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private async void Load(object sender, RoutedEventArgs e)
{
    System.Windows.Forms.FolderBrowserDialog folderBrowser = new System.Windows.Forms.FolderBrowserDialog();
    folderBrowser.SelectedPath = Environment.CurrentDirectory;
 
    System.Windows.Forms.DialogResult result = folderBrowser.ShowDialog();
 
    if (result != System.Windows.Forms.DialogResult.OK)
        return;
 
    string directory = folderBrowser.SelectedPath;
    if (!Directory.Exists(directory))
        return;
 
    loader = new Loader(directory);
    var trResult = await loader.TransformAsync();
 
    //и т. д.
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.12.2018, 23:59
Ответы с готовыми решениями:

System.Void из C# использоваться не может - для получения объекта типа void используйте typeof (void)
Изучаю с# по "Шилдт Г. - C# 4.0 полное руководство" При изучении конструктора возникла проблема: попытался запустить код на стр. 169, а...

Как из потока public void X1() извлечь значение string в public void X2()
Как из: public void X1() \\Запускается из потока (Process = new Thread(X1)) { //Какой то алгоритм string str =...

Как в "public void G2" получить значение string из "public void G1"
В "public void G1" имеется string str = "123", как в "public void G2" получить значение string из "public void G1"? str - постоянно...

3
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
01.01.2019, 00:15
Цитата Сообщение от Балто Посмотреть сообщение
после строки с await метод запускает задачу и начинает выполняться сначала. В итоге запускается ещё одно диалоговое окно. Как избежать данной проблемы?
Ну самое интересное скрыто за комментарием "и т.д.", так что сказать сложно
В целом же метод Load не должен запускаться сначала, если вы его где-то сами не запускаете.
1
12 / 9 / 4
Регистрация: 25.10.2015
Сообщений: 33
01.01.2019, 00:59  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
В целом же метод Load не должен запускаться сначала, если вы его где-то сами не запускаете.
Да, спасибо, просто фраза с форумов сбила меня с толку. Проблема заключалась в том, что при добавлении элементу MenuItem события через окно событий в VS почему-то это же событие добавилось и элементу в который он вложен.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
01.01.2019, 09:51
Цитата Сообщение от Балто Посмотреть сообщение
часто встречал фразу "void и await не лучшее сочетание".
Данная фраза несколько некорректна.

Применим аналогию:
"Может ли Ланцелот убить дракона?
- Может. Но не здесь и не сейчас. И не этим оружием. И не Ланцелот."

async void - терминальная ловушка цепочки асинхронности.
То есть async void является корнем как бы отдельной независимой программы.
async void идеально подходит для обработчика независимой кнопки,
живущей по принципу "Нажал на кнопку и забыл."

То есть, является инструментом, который нужно применять вовремя и в нужном месте, включив мозги.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.01.2019, 09:51
Помогаю со студенческими работами здесь

Асинхронный код и GC
Всем привет. У меня есть класс, который в конструкторе запускает асинхронную операцию для работы с сокетами. Скажите, пожалуйста, когда GC...

Асинхронный сервер
Интересует такая тема: Мне нужно реализовать сервер на C#, который будет получать запрос от клиента(json), а после этого будет проводить...

Асинхронный пинг
Пытаюсь запрограммировать асинхронный пинг, используя пример из msdn но при заполнении таблицы заполняется только первый ipaddress,...

Асинхронный сервер
всем привет. У меня есть асинхронный сервер, который получает данные следующим образом: private void OnRecieved(IAsyncResult ar) { ...

асинхронный сервер
Не могу определить выполняется ли метод в отдельном потоке имеется код public ClientConnection(Socket AcceptedSocket) ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru