2012-03-07 112 views
2
public string MyMethod(string param1) 
    { 
     var url = string.Format(UrlMask, HttpUtility.UrlEncode(param1), Login, ApiKey); 
     HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; 
     request.BeginGetResponse(result => 
       { 
        var requestInternal = (HttpWebRequest)result.AsyncState; 
        var response = (HttpWebResponse)requestInternal.EndGetResponse(result); 

        using (StreamReader streamReader = new StreamReader(response.GetResponseStream())) 
        { 
         var resultXml = XDocument.Load(response.GetResponseStream()); 
         var x = from r in resultXml.Descendants("node") 
           select r.Element("element").Value; 

        } 
       }, request); 

       return null; 
      } 

MyMethod當lambda函數完成時應返回string值。我的問題是:WP7中的IAsyncResult,如何知道異步方法何時完成?

  • 我怎麼能知道什麼時候內 request.BeginGetResponse lambda函數將結束?如何MyMethod知道它會返回值?

回答

1

時看到拉姆達完成後,你可以使用這樣的ManualResetEvent的:

public string MyMethod(string param1) 
    { 
     const int timeOutInMs = 1000; 

     using (ManualResetEvent ended = new ManualResetEvent(false)) 
     { 
      var url = string.Format(UrlMask, HttpUtility.UrlEncode(param1), Login, ApiKey); 
      HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; 
      request.BeginGetResponse(result => 
             { 
              var requestInternal = (HttpWebRequest) result.AsyncState; 
              var response = (HttpWebResponse) requestInternal.EndGetResponse(result); 
              using (
               StreamReader streamReader = 
                new StreamReader(response.GetResponseStream())) 
              { 
               var resultXml = XDocument.Load(response.GetResponseStream()); 
               var x = from r in resultXml.Descendants("node") 
                 select r.Element("element").Value; 
              } 
              ended.Set(); 
             }, request); 

      if (!ended.WaitHandle.WaitOne(timeOutInMs)) 
      { 
       throw new TimeoutException("lambda took too long to complete"); 
      } 
     } 
     return null; 
    } 
相關問題