Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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# 在Windows phone中阻止异步操作_C#_Windows Phone 7_Asynchronous_Windows Phone 8 - Fatal编程技术网

C# 在Windows phone中阻止异步操作

C# 在Windows phone中阻止异步操作,c#,windows-phone-7,asynchronous,windows-phone-8,C#,Windows Phone 7,Asynchronous,Windows Phone 8,我正在尝试将http post从windows phone发送到服务器,通过发送post数据,我遇到了一些问题。我将断点放在按钮单击功能中,发现它无法启动异步操作。除此之外,它还阻止当前线程,我知道这种情况是由allDone.waitOne()引起的 为什么非对称操作不起作用?如何解决 谢谢你的帮助 private void Button_Click_1(object sender, RoutedEventArgs e) { // Create a

我正在尝试将http post从windows phone发送到服务器,通过发送post数据,我遇到了一些问题。我将断点放在按钮单击功能中,发现它无法启动异步操作。除此之外,它还阻止当前线程,我知道这种情况是由
allDone.waitOne()
引起的

为什么非对称操作不起作用?如何解决

谢谢你的帮助

private void Button_Click_1(object sender, RoutedEventArgs e)
            {
            // Create a new HttpWebRequest object.
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            request.ContentType = "application/x-www-form-urlencoded";

            request.Method = "POST";

            // start the asynchronous operation
            request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);

            allDone.WaitOne();

        }
异步操作

private void GetRequestStreamCallback(IAsyncResult asynchronousResult)
        {
            HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;


            // End the operation
            Stream postStream = request.EndGetRequestStream(asynchronousResult);

            string postData = "xxxxxxxxxxx";    
            // Convert the string into a byte array. 
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);

            // Write to the request stream.
            postStream.Write(byteArray, 0, postData.Length);
            postStream.Close();

            // Start the asynchronous operation to get the response
            request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
        }

        private void GetResponseCallback(IAsyncResult asynchronousResult)
        {
            HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

            // End the operation
            HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
            Stream streamResponse = response.GetResponseStream();
            StreamReader streamRead = new StreamReader(streamResponse);
            string responseString = streamRead.ReadToEnd();
            tbtesting.Text = responseString.ToString();

            streamResponse.Close();
            streamRead.Close();

            response.Close();
            allDone.Set();
        }

你不是第一个碰到这个的(见)。如果执行此操作,则会在Windows Phone上死锁UI线程


最接近的方法是在网络调用中使用async/await。作为NuGet上Microsoft.Bcl.Async包的一部分,您可以使用一些扩展方法来执行此操作。

您不是第一个遇到此问题的人(请参阅)。如果执行此操作,则会在Windows Phone上死锁UI线程

最接近的方法是在网络调用中使用async/await。有一些扩展方法可以作为NuGet上的Microsoft.Bcl.Async包的一部分来执行此操作