powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / [SL] Асинхронность и загрузка данных
31 сообщений из 31, показаны все 2 страниц
[SL] Асинхронность и загрузка данных
    #37026082
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Допустим, у нас есть класс-провайдер данных вида и мы подгружаем данные, например, из xml файла.
Код: plaintext
1.
2.
public interface IDataProvider {
	List<Data> GetData(source);
}

Как реализовать этот класс?

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

Можно сделать вызов своего события по срабатыванию события окончания загрузки данных из xml, но это немного не то, что нужно.
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026124
Denis Gladkikh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
enigmatic,

Хм... Немного не понятно, а зачем вы так хотите сделать? В SL специально все прокси классы на сервисы генерируются только с поддержкой асинхронных операций. Будет по другому - интерфейс будет очень заметно тормозить.

Если вы все таки обрабатываете это в другом потоке, то в реализации IDataProvider просто вызывайте метод сервиса с подпиской на возврат, потом ждите пока ответ придет, и возвращайте результат.

Но все же хотелось узнать, зачем это нужно?
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026128
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По вопросу вообще нихрена не понятно.
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026276
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУПо вопросу вообще нихрена не понятно.

По-моему, очень даже понятно: автор - совершеннейший "нуб"...
(он думает, что асинхронный вызов метода должен возвращать куда-то данные, которые этот метод возвращает синхронно).

RTFM
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026307
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-qu, примите этот скромный подарок :)

от оно чё, михалычЗа телепатизм!
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026379
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Denis Gladkikh

Допустим, у нас есть модель:
class Model { string List<Data> {get; set;} }
Есть View где прописано:
в xaml: ItemsSource="{Binding}"
в коде:
Код: plaintext
1.
2.
3.
public List<Data> Model {
            get { return this.DataContext as List<Data>; }
            set { this.DataContext = value; } 
}
Есть presenter который задает:
Код: plaintext
1.
var data = dataProvider.GetData();
this.View.Model = data; 

И есть DataProvider, который нам эти данные возвращает. Данные берутся из xml файла, который выкачивается WebClient'ом асинхронно.
Вопрос: как должен выглядеть GetData() класса DataProvider, чтобы DataProvider мог реализовать интерфейс:
[SRC C#]public interface IDataProvider {
List<Data> GetData(source);
}
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026405
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подписка на возврат это не есть хорошо, т.к. получается что-то вида:
Код: plaintext
1.
2.
3.
class DataProvider {
	void BeginGetData(); //здесь асинхронный вызов
	void EndGetDataEventHandler(object sender, EndGetDataEventArgs args);
}
где EndGetDataEventArgs:
Код: plaintext
1.
2.
3.
class EndGetDataEventArgs {
	List<Data> data;
}
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026422
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
Любовь к собственным велосипедам у нас неистребима.
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026458
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще есть мысли, что DataProvider должен быть в виде WCF service.
Еще есть такой вариант:
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=807655&msg=9813716
Еще, может я и нуб, но похоже т-щ qu-qu либо ничего не понял, либо нихрена не шарит.
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026509
Фотография Шайтан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026544
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticА еще есть мысли, что DataProvider должен быть в виде WCF service.
Еще есть такой вариант:
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=807655&msg=9813716
Еще, может я и нуб, но похоже т-щ qu-qu либо ничего не понял, либо нихрена не шарит.
Г-хоспаде!
(обижаться сразу).

Наберите сперва 3410 постов на этом форуме (большинство из которых "по делу"), а потом уже обижайтесь (если вам тогда захочется, или вас кто-то с 34-мя постами начнет критиковать).

З.Ы. а по ссылке, что вы привели - если хотя бы 50% из написанного в том посте кода вам понятно, то задавать вопросы типа пост-старта уже не имеет необходимости... (ИМХО).
(учите матчасть, уважаемый, я таких как вы ем на завтрак или закусываю ими пиво во время ночных инспекций по проф-форумам).
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026558
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026587
Фотография Шайтан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026591
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i С Rx все гораздо проще
если есть подходящие методы для Observable.FromAsyncPattern, у WebClient-а их нет, к сожалению...
а вообще, Rx - замечательная библиотека (некоторые разработчики считают что она будет включена в fw5)
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026622
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRа вообще, Rx - замечательная библиотека
получил настоящее удовольствие от этого примера
(вспомнились чьи-то жалобы, что в сильвере нет workflow, так вот же он! :))
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026655
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шайтан Реализация модели асинхронного программирования в CLR. Джеффри Рихтер

Рихтер, конечно, умный чувак, но реализация IAsyncResult у него там типа "для статьи", лучше (мне кажется) пользоваться стандартными делегатами и готовой реализацией IAsyncResult из фреймворка.

З.Ы. нагружать топик-стартера собственной (Рихтеровской) реализацией IAsyncResult (ИМХО) - только портить...
(у него еще столько впечатлений впереди от изучения асинхронной модели как таковой).
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026691
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-qu,

Да никто не обижался, вопрос был в том, как заставить DataProvider удовлетворять простому интерфейсу, т.е. чтобы снаружи это выглядело как синхронный вызов, а не делать коллбек с подпиской на завершение загрузки данных.

Потому, что в первом случае оно выглядит вот так:
Код: plaintext
1.
2.
public interface IDataProvider {
	List<Data> GetData(source);
}
А во втором так:
Код: plaintext
1.
2.
3.
class DataProvider {
	void BeginGetData(); //здесь асинхронный вызов
	void EndGetDataEventHandler(object sender, EndGetDataEventArgs args);
}
Причем, чтобы тот кто использует этот поставщик не заморачивался по поводу завершилась ли у него загрузка данных или нет.
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026739
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
LRi С Rx все гораздо проще
если есть подходящие методы для Observable.FromAsyncPattern, у WebClient-а их нет, к сожалению...
а вообще, Rx - замечательная библиотека (некоторые разработчики считают что она будет включена в fw5)

Для WebClient'a я уже приводил решение с Rx. Рихтера и Net 2.0 давно уже пора на муккулатуру сдать
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026749
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
enigmaticПричем, чтобы тот кто использует этот поставщик не заморачивался по поводу завершилась ли у него загрузка данных или нет.

Чудеса бывают только под елкой в Новый год, а это не тот случай
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026756
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticqu-qu,

Да никто не обижался, вопрос был в том, как заставить DataProvider удовлетворять простому интерфейсу, т.е. чтобы снаружи это выглядело как синхронный вызов, а не делать коллбек с подпиской на завершение загрузки данных.

Потому, что в первом случае оно выглядит вот так:
Код: plaintext
1.
2.
public interface IDataProvider {
	List<Data> GetData(source);
}
А во втором так:
Код: plaintext
1.
2.
3.
class DataProvider {
	void BeginGetData(); //здесь асинхронный вызов
	void EndGetDataEventHandler(object sender, EndGetDataEventArgs args);
}
Причем, чтобы тот кто использует этот поставщик не заморачивался по поводу завершилась ли у него загрузка данных или нет.

Всего-то и делов?
("правильно сформулированный вопрос содержит половину ответа" (с) не помню чей).

Попробуйте, хотя бы, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public interface IDataProvider {
	List<Data> GetData(object source);
}

public class SyncDataProvider: IDataProvider {
    public List<Data> GetData(object source){
        Func<object, Data> work = (s) => new List<Data> { new Data(1), new Data(2), new Data(3)};   
        var async = work.BeginInvoke(source,null,null);
        return work.EndInvoke(async);
    }
}
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026768
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-qu,

Ошибся немного, вместо Func<object, Data> надо писать Func<object, List<Data>>
(нет компилера еще в голове).
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026785
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-qu,

Похоже, то что надо. Спасибо.
Извините, если обидел.
Пойду разбираться.
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026786
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmatic,

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

З.Ы. не даром MS не стала реализовывать синхронную модель обращения к сервисам из-под SL.
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026812
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticqu-qu,

Похоже, то что надо. Спасибо.
Извините, если обидел .
Пойду разбираться.
Гм, ну точно - "нуб" (по крайней мере в этом форуме).
(почитали бы вы как тут ко мне обращались в других ветках... впрочем, меня это не колышет, мне гораздо важнее - сухое: "то что надо. Спасибо", а таких комментов, слава БГ, пока больше).
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026814
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
qu-quenigmaticqu-qu,

Да никто не обижался, вопрос был в том, как заставить DataProvider удовлетворять простому интерфейсу, т.е. чтобы снаружи это выглядело как синхронный вызов, а не делать коллбек с подпиской на завершение загрузки данных.

Потому, что в первом случае оно выглядит вот так:
Код: plaintext
1.
2.
public interface IDataProvider {
	List<Data> GetData(source);
}
А во втором так:
Код: plaintext
1.
2.
3.
class DataProvider {
	void BeginGetData(); //здесь асинхронный вызов
	void EndGetDataEventHandler(object sender, EndGetDataEventArgs args);
}
Причем, чтобы тот кто использует этот поставщик не заморачивался по поводу завершилась ли у него загрузка данных или нет.

Всего-то и делов?
("правильно сформулированный вопрос содержит половину ответа" (с) не помню чей).

Попробуйте, хотя бы, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public interface IDataProvider {
	List<Data> GetData(object source);
}

public class SyncDataProvider: IDataProvider {
    public List<Data> GetData(object source){
        Func<object, Data> work = (s) => new List<Data> { new Data(1), new Data(2), new Data(3)};   
        var async = work.BeginInvoke(source,null,null);
        return work.EndInvoke(async);
    }
}

Если перевести, что
сказал Денис , то достаточно создать обычный синхронный WCF сервис, а студия для него сгенерит асинхронный прокси с нужными BeginXXXX, EndXXXX. Не нужны эти пляски с бубном
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026854
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iЧудеса бывают только под елкой в Новый год, а это не тот случай
Так ведь в приведенных вами же примерах с Rx именно так и делается. Вызывается ведь "как бы" синхронно. Но это не синхронная модель обращения к данным, правильно?
Например:
http://programmerpayback.com/2010/03/22/silverlight-rx-dataclient-within-mvvm/ public static IObservable<RssItem> GetRssItems(Uri Uri) { ... }

А это отличается от List<Data> GetData(source) только возвращаемым значением.
qu-quКстати, товарищи вам совершенно справедливо заметили о том, что для SL такой подход не катит, т.к. на все время выполнения загрузки данных ваш UI будет висеть...
Согласен, но можно ведь обращаться к сервису получения данных, чтобы это выглядело как синхронный вызов, но на самом деле обращение было бы асинхронным.
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026865
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i,

Ненавижу оверквотинг...

З.Ы. Денис лучше бы код приводил в примеры, а не пытался выразить русскими словами паттерны использования асинхронных операций...

"... вызывайте метод сервиса с подпиской на возврат, потом ждите пока ответ придет, и возвращайте результат..." - "Извините, кто на ком стоял?" (с) Ф.Ф. Преображенский, "Собачье сердце".
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026884
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmatic...
qu-quКстати, товарищи вам совершенно справедливо заметили о том, что для SL такой подход не катит, т.к. на все время выполнения загрузки данных ваш UI будет висеть...
Согласен, но можно ведь обращаться к сервису получения данных, чтобы это выглядело как синхронный вызов , но на самом деле обращение было бы асинхронным.

Выглядело как синхронный вызов и было синхронным вызовом - разные вещи, согласитесь?

Чтобы "выглядело" - Rx, чтобы "было" - EndInvoke().
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37026903
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-quenigmaticучите матчасть, уважаемый, я таких как вы ем на завтрак или закусываю ими пиво во время ночных инспекций по проф-форумам

qu-qu суроф, ничё не скажешь )
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37027003
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-qu,

Значит, Rx - то что нужно.
Спасибо вам еще раз.
...
Рейтинг: 0 / 0
[SL] Асинхронность и загрузка данных
    #37027046
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
qu-qui,

Ненавижу оверквотинг...

З.Ы. Денис лучше бы код приводил в примеры, а не пытался выразить русскими словами паттерны использования асинхронных операций...

"... вызывайте метод сервиса с подпиской на возврат, потом ждите пока ответ придет, и возвращайте результат..." - "Извините, кто на ком стоял?" (с) Ф.Ф. Преображенский, "Собачье сердце".

Лучше бы без лишних эмоций и советов не в тему
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / [SL] Асинхронность и загрузка данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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