Подход к загрузке форм и индикатору занятости - PullRequest
0 голосов
/ 01 декабря 2010

Я «медленно» перехожу в Silverlight с asp.net и у меня возникает вопрос о том, как справиться с ситуацией, когда необходимо выполнить какой-то код после завершения вызовов веб-службы. Например, когда пользователь щелкает строку в сетке данных, появляется диалоговое окно, позволяющее редактировать запись. Он содержит многочисленные поля со списком, флажки и т. Д. Поэтому мне нужно сначала загрузить данные для каждого из полей со списком, а затем, когда вся загрузка закончилась, мне нужно установить связанный объект. Поскольку я новичок в этой асинхронной вещи, я подумал о том, чтобы иметь какой-то счетчик, который будет отслеживать, сколько вызовов было отправлено, и когда они закончат, уменьшите их на один, пока он не станет равным нулю, и в этот момент я мог бы повысить событие, когда загрузка закончилась, и я мог бы продолжить с тем, что когда-либо зависит от этого. Но это кажется очень неуклюжим способом сделать это. Я уверен, что многие сталкивались с этой проблемой, так как вы это делаете. Если это помогает, мы используем Prism с подходом MVVM и Ria Services с Dtos.

1 Ответ

0 голосов
/ 01 декабря 2010

То, что вы описали, это в значительной степени путь. Могут быть более элегантные вещи, которые вы можете сделать с замками и мьютексами, но ваш счетчик будет работать. У него есть бонус, благодаря которому вы можете видеть, сколько операций все еще "выполняется" одновременно.

Вы можете отправлять свои события последовательно, но это уничтожит всю цель асинхронных операций.

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

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