То, что вы ищете, это не синхронные рабочие процессы (это было бы очень сложно, если не невозможно, в Silverlight).Скорее вы хотите иметь возможность управлять асинхронными рабочими процессами последовательно .Вы хотите иметь возможность сказать «Загрузите эту строку из веб-службы, а затем преобразовать строку в массив JSON», не беспорядочно обрабатывая обратные вызовы и события.
Что ж, есть хорошие и плохие новости,Хорошей новостью является то, что есть решение этой проблемы - оно называется Coroutines .Сопрограммы - это способ остановить выполнение последовательного фрагмента кода до тех пор, пока последняя часть не будет завершена, даже если эта часть асинхронна.
Плохая новость заключается в том, что сопрограммы изначально не реализованы в C # (хотя они и поступает в C # 5 ).Вы можете реализовать свои собственные последовательные рабочие процессы, и здесь есть совершенно блестящая статья здесь .Это длинная статья, и это немного сложно, если вы никогда не делали этого раньше.
Но не отчаивайтесь!Есть более простой способ. Caliburn.Micro - это инфраструктура MVVM, которая на самом деле имеет простую реализацию сопрограмм.На самом деле, вы можете довольно легко использовать сопрограммы Caliburn.Micro без использования какой-либо другой части фреймворка, если вы действительно этого хотите.Создатель Caliburn.Micro, Роб Айзенберг, имеет отличную статью о сопрограммах, включая теорию и практику, здесь .
В основном ваш код будет выглядеть примерно так:
public IEnumerable<IResult> DoTheThing() {
var json = new FetchString("webserviceaddress.asmx");
yield return json;
var jsonStr = json.Result;
var jsonArray = createJsonArray(jsonStr);
// do stuff with the array
}
По крайней мере, я думаю, это то, что вы ищете:)