C# 如何同步等待HttpWebRequest回调方法获得响应

C# 如何同步等待HttpWebRequest回调方法获得响应,c#,wcf,windows-phone-8,synchronization,httpwebrequest,C#,Wcf,Windows Phone 8,Synchronization,Httpwebrequest,我希望RemoteInsert()方法等待我的回调GetResponseCallback。 我无法做到这一点,因为我尝试了很多事情。 有人能在这里帮助我吗。 我不希望主线程在响应到来之前执行其他操作。 请建议。在回答之后,我必须将其用于下一次执行 public void RemoteInsert() { String dataSet = "dataset=" + json.ToString(); accessKey = mobRemoteDB.access

我希望RemoteInsert()方法等待我的回调GetResponseCallback。 我无法做到这一点,因为我尝试了很多事情。
有人能在这里帮助我吗。 我不希望主线程在响应到来之前执行其他操作。 请建议。
在回答之后,我必须将其用于下一次执行

public void RemoteInsert()  
{
        String dataSet = "dataset=" + json.ToString();  
        accessKey = mobRemoteDB.accessKey;  
        String paramaters = "?llcommand=sndmsg&" + "ak=" + accessKey +   "&command=remoteinsert&" + dataSet;  
        String url = mobRemoteDB.baseUrlForRemoteInsert + paramaters;
        HttpWebRequest webRequest = (HttpWebRequest)System.Net.WebRequest.Create(url);    
        webRequest.Method = "POST";    
        webRequest.ContentType = "application/json";  
       if (NetworkInterface.GetIsNetworkAvailable() & IsDataValid)  
        {
         webRequest.BeginGetRequestStream(newAsyncCallback(GetRequestStreamCallback),webR equest); 
        }  
}  

void GetRequestStreamCallback(IAsyncResult asynchronousResult)
    {
        HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;           
        webRequest.BeginGetResponse(new AsyncCallback(GetResponseCallback), webRequest);            
    }


 void GetResponseCallback(IAsyncResult asynchronousResult)
    {
        try
        {                
            HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
            HttpWebResponse response = (HttpWebResponse)webRequest.EndGetResponse(asynchronousResult);
            Stream streamResponse = response.GetResponseStream();
            StreamReader streamReader = new StreamReader(streamResponse);
            JObject json_response = JObject.Parse(streamReader.ReadToEnd());
            String key = (String)json_response["ret"];
            JObject dic = (JObject)json_response["retdic"];
         }
         catch(WebException e)
         {
         }
    }

我想实现它,就像第一个任务A完成一样,然后是任务(C),因为它是关于任务(A)成功的。那么任务(B)

如果我理解您的问题,您希望在调用线程上执行webrequest,并等待它完成后再继续

您可以使用async/await简化
RemoteInsert()
方法,并使用
GetResponseAsync()
方法在一次调用中获取响应对象。大概是这样的:

Here My code is going like 
1. Task(A).running----await 
2.   ------------------------------->Task(B)
3                              ---------Response From Task(A)------->Task(C)
失去另外两种方法,因为它们不再需要了

调用此方法时,可以对其进行等待():

然而,WP试图强制好的异步模式来避免这样做。在这种情况下,您需要什么来阻止UI线程

在调用RemoteInsert()的方法中。。。让我们假设这是某种按钮点击事件。。。你不能这样做吗

RemoteInsert().Wait();

换句话说,与其阻塞UI线程,不如在RemoteInsert()方法完成后执行其他方法。

如果我理解您的问题,您希望在调用线程上执行webrequest,并等待它完成后再继续

您可以使用async/await简化
RemoteInsert()
方法,并使用
GetResponseAsync()
方法在一次调用中获取响应对象。大概是这样的:

Here My code is going like 
1. Task(A).running----await 
2.   ------------------------------->Task(B)
3                              ---------Response From Task(A)------->Task(C)
失去另外两种方法,因为它们不再需要了

调用此方法时,可以对其进行等待():

然而,WP试图强制好的异步模式来避免这样做。在这种情况下,您需要什么来阻止UI线程

在调用RemoteInsert()的方法中。。。让我们假设这是某种按钮点击事件。。。你不能这样做吗

RemoteInsert().Wait();

换句话说,与其阻塞UI线程,不如在RemoteInsert()方法完成后执行其他方法。

如果我理解您的问题,您希望在调用线程上执行webrequest,并等待它完成后再继续

您可以使用async/await简化
RemoteInsert()
方法,并使用
GetResponseAsync()
方法在一次调用中获取响应对象。大概是这样的:

Here My code is going like 
1. Task(A).running----await 
2.   ------------------------------->Task(B)
3                              ---------Response From Task(A)------->Task(C)
失去另外两种方法,因为它们不再需要了

调用此方法时,可以对其进行等待():

然而,WP试图强制好的异步模式来避免这样做。在这种情况下,您需要什么来阻止UI线程

在调用RemoteInsert()的方法中。。。让我们假设这是某种按钮点击事件。。。你不能这样做吗

RemoteInsert().Wait();

换句话说,与其阻塞UI线程,不如在RemoteInsert()方法完成后执行其他方法。

如果我理解您的问题,您希望在调用线程上执行webrequest,并等待它完成后再继续

您可以使用async/await简化
RemoteInsert()
方法,并使用
GetResponseAsync()
方法在一次调用中获取响应对象。大概是这样的:

Here My code is going like 
1. Task(A).running----await 
2.   ------------------------------->Task(B)
3                              ---------Response From Task(A)------->Task(C)
失去另外两种方法,因为它们不再需要了

调用此方法时,可以对其进行等待():

然而,WP试图强制好的异步模式来避免这样做。在这种情况下,您需要什么来阻止UI线程

在调用RemoteInsert()的方法中。。。让我们假设这是某种按钮点击事件。。。你不能这样做吗

RemoteInsert().Wait();

换句话说,与其阻塞UI线程,不如在RemoteInsert()方法完成后执行这些其他方法。

您是否厌倦了使用webRequest.GetRequestStream()而不是.BeginGetRequestStream()你提到你“尝试了很多东西”。了解您的尝试会很有帮助。我尝试了EventWaitHandle InsertionOne=new EventWaitHandle(false,EventResetMode.ManualReset);然后插入一个.WaitOne();等待。但即使在设置SignalInsertionOne1.Set()之后,应用程序仍处于死锁状态;接收到响应但没有webRequest.GetRequestStream()方法是否厌倦了使用webRequest.GetRequestStream()而不是.BeginGetRequestStream()你提到你“尝试了很多东西”。了解您的尝试会很有帮助。我尝试了EventWaitHandle InsertionOne=new EventWaitHandle(false,EventResetMode.ManualReset);然后插入一个.WaitOne();等待。但即使在设置SignalInsertionOne1.Set()之后,应用程序仍处于死锁状态;接收到响应但没有webRequest.GetRequestStream()方法是否厌倦了使用webRequest.GetRequestStream()而不是.BeginGetRequestStream()你提到你“尝试了很多东西”。了解您的尝试会很有帮助。我尝试了EventWaitHandle InsertionOne=new EventWaitHandle(false,EventResetMode.ManualReset);然后插入一个.WaitOne();等待。但即使在设置SignalInsertionOne1.Set()之后,应用程序仍处于死锁状态;接收到响应但没有webRequest.GetRequestStream()方法是否厌倦了使用webRequest.GetRequestStream()而不是.BeginGetRequestStream()你提到你“尝试了很多东西”。了解您的尝试会很有帮助。我尝试了EventWaitHandle InsertionOne=new EventWaitHandle(false,EventResetMode.ManualReset);然后插入一个.WaitOne();等待。但即使在设置SignalInsertionOne1.Set()之后,应用程序仍处于死锁状态;其中接收到响应,但没有webRequest.GetRequestStream()方法