Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 执行异步Web请求时出现问题_C#_Asynchronous_Windows Phone 7 - Fatal编程技术网

C# 执行异步Web请求时出现问题

C# 执行异步Web请求时出现问题,c#,asynchronous,windows-phone-7,C#,Asynchronous,Windows Phone 7,有人能告诉我这个简单的代码有什么错吗? 当我运行它时,它会挂起 using (Stream postStream = request.EndGetRequestStream(asynchronousResult)) 如果我注释掉requestState.Wait.WaitOne();行代码正确执行,但显然不等待响应。我猜对EndGetRequestStream的调用以某种方式将我返回到主线程的上下文??我非常确定我的代码本质上与示例相同() 两件事: 我认为您不能重复使用相同的请求对象。i、

有人能告诉我这个简单的代码有什么错吗? 当我运行它时,它会挂起

using (Stream postStream = request.EndGetRequestStream(asynchronousResult))
如果我注释掉requestState.Wait.WaitOne();行代码正确执行,但显然不等待响应。我猜对EndGetRequestStream的调用以某种方式将我返回到主线程的上下文??我非常确定我的代码本质上与示例相同()

两件事:

  • 我认为您不能重复使用相同的请求对象。i、 e.每个HttpWebRequest实例可以调用BeginGetRequestStream一次。 如果要执行两个请求(对服务器的调用),则需要两个HttpWebRequest实例,每个请求一个

  • 如果您想要同步行为,您有两个选项:使用GetRespose方法 或者以同步方式使用开始/结束。为此,不需要将回调传递给BeginGetRequestStream方法(可以传递null)。 从BeginGetRequestStream(IAsyncResult)获取返回值并将其传递给EndGetRequestStream方法:

    AsyncResult resultRequest = request.BeginGetRequestStream(null, null);
    Stream postStream = request.EndGetRequestStream(asynchronousResult)
    

  • EndGetRequestStream将一直阻止,直到请求完成为止(如果您是从UI执行此操作,则这是错误的,但它仍然可以工作)。

    上述代码在Windows Phone 7上引发NullReferenceException。您最好这样做:var wait_handle=new ManualResetEvent(false);var result=request.BeginGetRequestStream((ar)=>wait_handle.Set(),null);等等;返回请求。EndGetRequestStream(结果);
    AsyncResult resultRequest = request.BeginGetRequestStream(null, null);
    Stream postStream = request.EndGetRequestStream(asynchronousResult)