Речь идет о реализации WebClienta в Silverlight.
Особенность этой реализации, что они выкинули из нее все возможности синхронных
вызовов, оставив только асинхронные.
В результате логика программы принимает весьма причудливую форму.
В некоторых случаях очень бы хотелось получить все же синхронный вызов и
по его результатам — удачный, неудачный принимать дальнейшее решение.
Кто-то может подсказать какие дополнительные фокусы можно использовать
для получения синхронного вызова, из асинхронного.
Может есть просто другой класс для этого?
Я с Silverlight не работал, поэтому могу ошибаться.
Но, стандартно, асинхронный вызов возвращает IAsyncResult, у которого есть свойство AsyncWaitHandle.
Можно дождаться его освобождения WaitHandle.WaitOne, т.е.
var iar = client.BeginXXX();
WaitHandle.WaitOne(iar.AsyncWaitHandle);
var result = client.EndXXX(iar); //Will not block, but can throw :)
P.S.
Думается, если синронный вызов из Silverlite выкинули, то это неспроста.
Возможно концепция работы с WebServices в нем другая.
Может кто из более опытных товарищей просветит, для общего развития так сказать.
Re: WebClient, синхронный вызов
От:
Аноним
Дата:
23.09.09 08:10
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Привет всем. использовать А>для получения синхронного вызова, из асинхронного. А>Может есть просто другой класс для этого?
В концепции сильверлайта нельзя выполнять длительные операции в основном потоке, поэтому необходимо реализовывать архитектуру исключающие таких локов. это правило
Здравствуйте, Аноним, Вы писали:
А>Привет всем.
А>Речь идет о реализации WebClienta в Silverlight. А>Особенность этой реализации, что они выкинули из нее все возможности синхронных А>вызовов, оставив только асинхронные. А>В результате логика программы принимает весьма причудливую форму. А>В некоторых случаях очень бы хотелось получить все же синхронный вызов и А>по его результатам — удачный, неудачный принимать дальнейшее решение. А>Кто-то может подсказать какие дополнительные фокусы можно использовать А>для получения синхронного вызова, из асинхронного. А>Может есть просто другой класс для этого?
А>Заранее спасибо
Хочешь подвесить браузер, когда качаешь данные сервера?
Re[2]: WebClient, синхронный вызов
От:
Аноним
Дата:
23.09.09 09:18
Оценка:
L>Хочешь подвесить браузер, когда качаешь данные сервера?
Да нет не хочу. Просто получается с точки зрения пользователя следующая картина.
Он выполнил какие-то изменения и переключился на др. страницу (в пределах одного приложения Silverlight)
А через какое-то время приходит сообщение —
из серии не могу я это сохранить потому как ....
Особенно когда это может быть по виде пользователя, что-то не так сделал и нужно переделать.
Или нужно блокировать любые переключения пока не отработает сохранение.
L>>Хочешь подвесить браузер, когда качаешь данные сервера?
А>Да нет не хочу. Просто получается с точки зрения пользователя следующая картина. А>Он выполнил какие-то изменения и переключился на др. страницу (в пределах одного приложения Silverlight) А>А через какое-то время приходит сообщение - А>из серии не могу я это сохранить потому как .... А>Особенно когда это может быть по виде пользователя, что-то не так сделал и нужно переделать.
Не обязательно, как напишешь так и будет работать. Например, использовать статус бар и т.п.
А>Или нужно блокировать любые переключения пока не отработает сохранение.
Если вкладки не зависимы и работа может выполняться параллельно, почему бы и не позволять переходить.