Windows phone 7 如何编写异步方法?

Windows phone 7 如何编写异步方法?,windows-phone-7,asynchronous,Windows Phone 7,Asynchronous,我有一个执行HTTPPOST的方法,因为我使用HttpWebRequest来执行它,所以该方法依赖于异步调用。因为我需要我的方法返回Http POST的响应代码,所以我想使我的方法异步。我该怎么做 我正在考虑使用Dispatcher 编辑:我的代码结构的基本轮廓如下所示: string response; string httpPost(){ HttpWebRequest.BeginGetRequestStream(new AsyncCallback(requestCallback),

我有一个执行HTTPPOST的方法,因为我使用HttpWebRequest来执行它,所以该方法依赖于异步调用。因为我需要我的方法返回Http POST的响应代码,所以我想使我的方法异步。我该怎么做

我正在考虑使用Dispatcher

编辑:我的代码结构的基本轮廓如下所示:

string response;

string httpPost(){
    HttpWebRequest.BeginGetRequestStream(new AsyncCallback(requestCallback), httpWebRequest);
    return response;
}

void requestCallback(IAsyncResult asyncResult){
     HttpWebRequest.EndGetRequestStream(asyncResult);
     HttpWebRequest.BeginGetResponse(new AsyncCallback(responseCallback), httpWebRequest);
}

void responseCallback(IAsyncResult asyncResult){
     HttpWebResponse webResponse = (HttpWebResponse) HttpWebRequest.EndGetResponse(asyncResult);
     response = webResponse.StatusCode.ToString();
}
我想将httpPost()更改为异步方法

编辑2:

public static void httpPost(Action<string> completed)
{        
    HttpWebRequest.BeginGetRequestStream(new AsyncCallback(requestCallback), httpWebRequest);
    completed(HttpEngine.response);
}
公共静态无效httpPost(操作已完成)
{        
BeginGetRequestStream(新的AsyncCallback(requestCallback),HttpWebRequest);
完成(HttpEngine.response);
}

在WP7上,HTTPWebRequest已经是异步的-有关其使用示例,请参阅


在WP7上,HTTPWebRequest已经是异步的——有关其使用示例,请参阅


我有一个为Http Post执行HttpWebRequest的方法,但是由于HttpWebRequest是异步的,我想返回响应,我希望我的方法也是异步的。我认为您的编辑实际上使它不那么清晰。如果希望在HTTP post发生时执行某些操作,请查看我所做的更改。我希望返回响应,但响应必须等待HTTP post完成。这意味着,当我以当前形式调用该方法时,我不会得到响应,因为HTTP Post尚未完成。假设我将响应初始化为“start”,当我调用httpPost时,它将返回“start”,而不是web响应,因为httpPost尚未完成。所以我想使httpPost方法异步,并在另一个类中处理它。这就是我的示例现在所做的-通过传递一个动作-如果您愿意,它可以是另一个类上的一个方法。那么我在EDIT2中输入的代码会使我的方法异步吗?我正在更改httpPost并保留它调用的方法。我有一个方法可以为httpPost执行HttpWebRequest,但由于HttpWebRequest是异步的,我想返回响应,我希望我的方法也是异步的。我认为您的编辑实际上使它不太清楚。如果希望在HTTP post发生时执行某些操作,请查看我所做的更改。我希望返回响应,但响应必须等待HTTP post完成。这意味着,当我以当前形式调用该方法时,我不会得到响应,因为HTTP Post尚未完成。假设我将响应初始化为“start”,当我调用httpPost时,它将返回“start”,而不是web响应,因为httpPost尚未完成。所以我想使httpPost方法异步,并在另一个类中处理它。这就是我的示例现在所做的-通过传递一个动作-如果您愿意,它可以是另一个类上的一个方法。那么我在EDIT2中输入的代码会使我的方法异步吗?我正在更改httpPost并保留它调用的方法
        public void DoThePost(Action<string> onSuccess)
{
     var request = (HttpWebRequest)WebRequest.Create(new Uri("http://www.sherdog.com/rss/news.xml"));
    request.BeginGetResponse(r =>
    {
            var httpRequest = (HttpWebRequest)r.AsyncState;
            var httpResponse = (HttpWebResponse)httpRequest.EndGetResponse(r);

            using (var reader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var response = reader.ReadToEnd();

                Deployment.Current.Dispatcher.BeginInvoke(new Action(() =>
                    {
                        onSuccess(response);
                    }));
            }
    }, request);
}
DoPost((responseText) => { responseTextBlock.Text = responseText;});