2012-03-07 3 views
2

В настоящее время, работая над проектом с облачным/лазурным и окном телефона 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» перед тем, как позвонить в службу. Как я могу быть уверен, что я не выхожу из этого метода до того, как он не был заполнен?

+0

Почему все повторяется дважды? –

+4

Почему все повторяется дважды? –

ответ

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

+2

Вы должны назвать это только из фоновой темы – Ku6opr

+0

Спасибо он помогает – David

Смежные вопросы