2012-03-07 29 views
2

目前正在使用云/天蓝和windows phone 7开展项目,我必须打电话给服务。休息一下,确保异步方法完成

对我来说我使用尖锐休息的方便,但我面临一个问题; 我不知道我的上诉何时完成。

public static bool CreateUser(User userToCreate) 
{ 
    if (CheckNetwork()) 
    { 
     var client = new RestClient(Global.Url); 
     var request = new RestRequest("/user", Method.POST); 

     MemoryStream ms = new MemoryStream(); 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User)); 
     ser.WriteObject(ms, userToCreate); 
     string json = JsonHelper.ToJson(userToCreate); 

     request.AddHeader("Content-type", "application/json; charset=utf-8"); 

     request.AddParameter("application/json; charset=utf-8", json, ParameterType.RequestBody); 
     request.RequestFormat = DataFormat.Json; 

     try 
     { 
      object resp = null; 
      client.ExecuteAsync(request, response => 
              { 
               if (response.ResponseStatus == ResponseStatus.Completed) 
               { 
                RestResponse resource = response; 
                string content = resource.Content; 
                resp = Convert.ToBoolean(JsonHelper.FromJson<string>(content)); 
               } 

              }); 

      return (bool)resp; 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.ToString()); 
      return false; 
     } 
    } 
    MessageBox.Show("You are not connect to the network!"); 
    return false; 
} 

在这个例子中,该方法在呼叫服务之前首先返回“resp”。 如何确保在resp未被填充前我不退出此方法?

+0

为什么一切都重复两次? – 2012-03-07 09:32:05

+4

为什么一切都重复两次? – 2012-03-07 09:32:16

回答

7
EventWaitHandle Wait = new AutoResetEvent(false); 

client.ExecuteAsync(request, response => 
{ 
    if (response.ResponseStatus == ResponseStatus.Completed) 
    { 
     RestResponse resource = response; 
     string content = resource.Content; 
     resp = Convert.ToBoolean(JsonHelper.FromJson<string>(content)); 
     Wait.Set(); 
    } 
}); 

Wait.WaitOne(); 
+0

此技术似乎是解决方案的一部分,但他坚持休息'Wait.WaitOne();' ,并不回'Wait.Set();' – David 2012-03-07 09:56:01

+2

只能从后台线程调用它 – Ku6opr 2012-03-07 10:35:23

+0

谢谢它有助于 – David 2012-03-07 10:50:07