Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 26

Почему компилятор не продолжает выполнять код, и просто вылетает из процедуры?

01.07.2021, 13:55. Показов 2562. Ответов 8

Студворк — интернет-сервис помощи студентам
Добрый день. Есть процедура UploadPhotos(), в которой есть данный фрагмент:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public async void UploadPhotos()
{
     ...
     for (int i = 0; i < dataExcelTabel.Count(); i++)
         {
            ...
            HttpClient httpClient = new HttpClient();
            
            //Стопорится выполнение на этой строке        
            using (var stream = await httpClient.GetStreamAsync(dataExcelTabel[i].photo2))
            using (var file = File.OpenWrite(PathForSavePhotos + "/" + dataExcelTabel[i].codeProduct + "." + splitFileName[splitFileName.Length - 1]))
                    {
                             dataExcelTabel[i].pathPhotoSave = file.Name;
 
                             await stream.CopyToAsync(file);
                    }
 
            progressBar_LoadInfo.PerformStep();
            ...
        }
     ...
}
Переменная dataExcelTabel[i].photo2 - это прямая ссылка на изображение в интернете типа string для скачивания. Этот кусок выполняет загрузку изображения из интернета и сохранения потом на компьютер. Проблема в том, что при заходе на строку:

C#
1
using (var stream = await httpClient.GetStreamAsync(dataExcelTabel[i].photo2))
компилятор просто вылетает из процедуры UploadPhotos(), не выполнив его логику до конца. Изначально думал, что где то не закрытый поток конфликтует с этим, но нет. Другие потоки до этого все закрыты. В пошаговом режиме все тоже самое. Подскажите пожалуйста, как решить данную проблему

P/S Предлагали использовать Debug.WriteLine() для отладки, но что то не понял как его внедрять в код для тестировки
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.07.2021, 13:55
Ответы с готовыми решениями:

Подскажите почему не работает код (он у меня просто вылетает)
void vms() { char mp; char sp; int key; int v = 1,lv = 1,i,j; int nv; while (true) { ...

Код, который ломает MSVC компилятор (просто делюсь)
Привет! Иногда приходится кое-что делать под виндой и сегодня случайно наткнулся на такой креш void f(const std::string &amp;s) ...

При компилировании компилятор вылетает,нет ли ошибок, или почему он так?
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; using namespace std; int main; void init (int matrix, int size); ...

8
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
01.07.2021, 14:06
Цитата Сообщение от KoSYaK Посмотреть сообщение
просто вылетает из процедуры
метод ничего не возвращает, и выполнение когда доходит до await не ожидает его и идет дальше. Выполнение вернется в этот метод после выполнения GetStreamAsync.
Чтобы дождаться завершения метода нужно указать тип возвращаемого значение - Task
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
01.07.2021, 14:23
Цитата Сообщение от KoSYaK Посмотреть сообщение
компилятор просто вылетает из процедуры UploadPhotos()
Компилятор не может вылететь из процедуры.
На момент запуска приложения работа компилятора уже давным-давно завершилась.
0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 26
01.07.2021, 15:31  [ТС]
Переделать процедуру UploadPhotos() в функцию с возвратом тип Task?
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
01.07.2021, 15:54
KoSYaK, да
0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 26
01.07.2021, 16:10  [ТС]
Переделал. Первый прогон был успешным, но последующие опять вылеты. Может что неправильно написал?

C#
1
2
3
4
...
//В основном блоке
Task x = UploadPhotos();
...
C#
1
2
3
4
5
6
//Сама функция
public async Task UploadPhotos()
{
       ...
       return;
}
0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 26
02.07.2021, 10:27  [ТС]
В общем, после UploadPhotos() у меня идет выполнение функции GlobalHelp = CreateResponseMarketAdd(methodAddProduct )

C#
1
2
3
4
5
6
7
...
//Загружаем фотографии для товаров. Вылетает при активном ниже GlobalHelp
Task x = UploadPhotos();
 
//Отправляем команду добавления товара на сервера API
GlobalHelp = CreateResponseMarketAdd(methodAddProduct);
...
И когда я закомментирую функцию GlobalHelp = CreateResponseMarketAdd(methodAddProduct ), то логика в UploadPhotos() прогоняется без вылетов. А когда GlobalHelp участвует в логике, то вылеты возвращаются

C#
1
2
3
4
5
6
7
...
//Загружаем фотографии для товаров. Не вылетает при диактивном ниже GlobalHelp
Task x = UploadPhotos();
 
//Отправляем команду добавления товара на сервера API
//GlobalHelp = CreateResponseMarketAdd(methodAddProduct);
...
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
02.07.2021, 10:54
Лучший ответ Сообщение было отмечено KoSYaK как решение

Решение

KoSYaK, вызывать надо
C#
1
await UploadPhotos();
и сам вызывающий метод пометить как async Task
1
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 26
02.07.2021, 11:10  [ТС]
Ну все. Вроде разобрался. Решение твой совет + если в логика в Windows.Forms и ассинхронная функция в каком то событии (в моем случае события Нажатие кнопки), то событие тоже надо прописывать как ассинхронное. Рядовому +1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.07.2021, 11:10
Помогаю со студенческими работами здесь

GAS продолжает выполнять 19ю версию
function getJsonFromUrl(url) { var query = url;//.substr(1)url.indexOf('?')+ var result = {}; ...

Почему вылетает код?
Почему то при выполнении вылетает код. Помогите, пожалуйста разобраться. Файл, который читается прилагаю. #pragma endregion int...

Почему компилятор сгенерировал такой код на ассемблере?
Есть такой код функции, складывает два числа (результат работы компилятора, в ecx указатель на объект класса две переменные): mov ...

Обьясните (или просто укажите) почему код так работает
В общем, есть такой вот код. Все работает отлично, кроме одного, проверка на корректность. Если я введу неправильное значение, то потом,...

Почему-то программа "вылетает" при вызове процедуры
Здравствуйте! написала программу, по поиску данных в текстовом файле. При вызове данной процедуры ничего не происходит (по идее, в исходном...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
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 30.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 через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru