Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 04.08.2015
Сообщений: 126
1

Возвращение результата колбэка обратно в вызвавшую его функцию

04.05.2017, 15:43. Показов 1298. Ответов 7
Метки нет (Все метки)

C#
1
2
3
4
5
6
7
8
9
10
WebClient wc = new WebClient();
                            wc.BaseAddress = urlFile;
                            Uri uri = new Uri(urlFile);
                            JObject mes = new JObject();
                            mes.Add("token", token);
 
                            byte[] msg = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(mes));
                            wc.UploadDataCompleted += Wc_UploadDataCompleted;
                            wc.UploadDataAsync(uri, msg);
                            wc.Dispose();
Этот кусок кода находиться в функции которая должна по своему завершению возвратить результат(в виде обьекта WebResourceResponse). Тоесть я должен написать в конце return и вернуть WebResourceResponse, но как это сделать? в колбэке?:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void Wc_UploadDataCompleted(object sender, UploadDataCompletedEventArgs e)
            {
                try
                {
 
//код в котором формируем из ответа сервера обьект WebResourceResponse webRR
 
                    return webRR; // колбэк типа void - это вообще написать нельзя, но как тогда вернуть 
//результат в функцию, которая будучи незаблокированной асинхронной операцией уже закончилась? Делать все синхронно?
                }
                catch (Exception ex)
                {
                    Console.Out.WriteLine(ex.ToString() + " EXCEPTION!!!");
                }
            }
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2017, 15:43
Ответы с готовыми решениями:

возвращение результата выполнения функции(2) в исходную функцию(1)
В коде необходимо вернуть результат выполнения функции ReSet(n) в функцию-отправитель P(n). Когда я...

Возвращение результата функции bool и использование его в функции main()
У меня есть функция bool, которая имеет вид: bool Pisos(int row, int place) { if (...)...

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

Возвращение обратно
Нужно к данному коду сделать так что бы при вывод он обратно либо автоматически , либо сделать...

7
Злой самаритянин
182 / 182 / 94
Регистрация: 24.04.2014
Сообщений: 686
04.05.2017, 16:48 2
Роман Гайдук, перед именем объявляемого метода есть идентификаторы. У тебя private и void. Там где у тебя void - это тип возвращаемого значения. Пока там void, метод не может ничего вернуть. Напиши вместо него свой тип WebResourceResponse.

Добавлено через 1 минуту
Плюс у тебя не все ветви кода возвращают значение, поэтому не скомпилируется Можно дописать
C#
1
2
3
4
finally
{
    return null;
}
0
0 / 0 / 0
Регистрация: 04.08.2015
Сообщений: 126
05.05.2017, 10:28  [ТС] 3
Компилятор жалуется что после замены void на WebResourceResponse у колбэка стал неправильный возвращаемый тип. Очевидно делегат события UploadDataCompleted у WebClient имеет жесткие понятия про сигнатуру колбэка и поменять тип возвращаемого значения не выходит.
0
Злой самаритянин
182 / 182 / 94
Регистрация: 24.04.2014
Сообщений: 686
05.05.2017, 10:43 4
Роман Гайдук, наведи курсор на webRR и Visual Studio любезно покажет тебе его тип. Его ты пытаешься вернуть. Его нужно прописать как возвращаемый тип. Это самые базовые понятия методов в C#

Добавлено через 1 минуту
https://msdn.microsoft.com/ru-... 73114.aspx
0
0 / 0 / 0
Регистрация: 04.08.2015
Сообщений: 126
05.05.2017, 11:04  [ТС] 5
webRR имеет тип WebResourceResponse, если колбэку вместо void прописать WebResourceResponse то компилятор ругается. Я имею ввиду что колбэк этого события вообще не должен что-либо возвращать - делегат на который повешен метод принимает только void методы.
0
483 / 396 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
05.05.2017, 11:20 6
Роман Гайдук, ну так колбэк ничего и не возвращает. Такая вот архитектура. Ты лучше скажи что ты хочешь в общем сделать.
Если скажешь "Вернуть WebResourceResponse из колбека" - поставлю минус.
0
0 / 0 / 0
Регистрация: 04.08.2015
Сообщений: 126
05.05.2017, 11:52  [ТС] 7
У меня есть элемент WebView, в котором загружается стартовая страница одного сайта. Я должен делать все запросы на апи этого сайта и отдавать ответ WebView для отображения пользователю. Для этого я создал свой класс унаследованный от WebViewClient и в этом своем классе переопределил функцию ShouldInterceptRequest. Работаю я на Xamarin, но можете ориентироватся по доке для андроида, т.к. проект под андроид. ShouldInterceptRequest перехватывает все запросы и вместо того чтобы позволить WebView делать их передает управление мне. Я должен связатся с апи сайта, сделать запрос ориентируясь по аргументам которые мне дала ShouldInterceptRequest и вернуть ответ от сервера как обьект WebResourceResponse. Дальше WebView отображает все сам. Естественно перед тем как вернуть обьект я сохраняю все в базу данных чтобы при последующем аналогичном запросе вернуть все уже из файловой системы устройства - таким образом мое приложение работает оффлайн, хоть и с устаревшими данными. Ответ от сервера я получаю вышеописанным кодом, а вот вернуть его не выходит - колбэк по архитектуре ничего возвращать не должен, тогда как быть? ShouldInterceptRequest должна вернуть что-то WebView и в результате получается следующее: я перехвачиваю запрос, делаю его сам, результат остается в колбэке, а функция возвращает null вместо результата.
0
483 / 396 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
05.05.2017, 12:00 8
Роман Гайдук, вариантов целое море. На вскидку:
1) передавать WebResourceResponse в колбек через UploadDataCompletedEventArgs (ты ведь, знаешь, что объекты классов всегда передаются по ссылке)
2) Можно WebResourceResponse сделать полем какого-нибудь Singleton`а (андроид разработчики это очень любят)
3) Из колбека вызывать функцию обработки WebResourceResponse.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2017, 12:00

Возвращение на страницу обратно
Hi, Помогите, Знаю как переходить на следующую страницу по кнопке в приложении....

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

Изменение системной даты и возвращение её обратно
Всем доброго времени суток! Тема смены системного времени и даты уже обсуждались не раз,но вот в...

Возвращение результата запроса
Добрый вечер! Данный код находит технику по инвентарному номеру и при условии что в одном из...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.