У нас есть такой код в нашем приложении Silverlight для использования со службами данных WCF.Возможно, вы могли бы сделать что-то похожее для ваших веб-запросов:
Вот пример кода (не проверен) (обратите внимание, что на самом деле я никогда не писал ни одного кода, выполняющего веб-запросы, но, возможно, шаблон асинхронности похож на другиематериал, который я сделал в Silverlight):
public class WebRequesterHelper
{
Action _callback;
public void MakeWebRequest(object whateverYouNeedForTheWebRequest, Action callback)
{
_callback = callback;
//Make your async web request here, passing the helper object's callback.
IAsyncResult result = yourWebRequestObject.BeginGetResponse(new AsyncResultCallback(WebRequestCallback), yourRequestState);
}
public void WebRequestCallback(IAsyncResult result)
{
//Do whatever you need to do as a result of the web request, then call the callback.
if (_callback != null) callback();
}
}
В вашем коде, который хочет сделать веб-запрос:
var helper = new WebRequestHelper();
//Setup the web request
object request = SetUpYourWebRequest();
helper.MakeWebRequest(request, OnWebRequestCompleted);
Ваш обратный вызов помощника:
public void OnWebRequestCompleted()
{
//Web request is finished, what do I want to do?
}
Обратите внимание, что вы можете захотеть, чтобы ваш обратный вызов (который вы передаете объекту WebRequestHelper) принял параметр, и вы могли бы передать информацию обратно из функции обратного вызова веб-запроса (в объекте WebRequestHelper).