C# 异步HttpWebRequest正在禁用WP8.1上的GUI

C# 异步HttpWebRequest正在禁用WP8.1上的GUI,c#,xaml,asynchronous,request,windows-phone-8.1,C#,Xaml,Asynchronous,Request,Windows Phone 8.1,我在发送和接收HttpWebRequests和响应时遇到问题。当我开始通话时,我的当前代码将禁用手机的GUI。我已经阅读了很多问题,但我不知道如何更改代码,使其不禁用GUI,同时仍然可以获取数据 这是我的密码: public static string Data = "null"; private static ManualResetEvent allDone = new ManualResetEvent(false); public void SendReq

我在发送和接收HttpWebRequests和响应时遇到问题。当我开始通话时,我的当前代码将禁用手机的GUI。我已经阅读了很多问题,但我不知道如何更改代码,使其不禁用GUI,同时仍然可以获取数据

这是我的密码:

    public static string Data = "null";

    private static ManualResetEvent allDone = new ManualResetEvent(false);

        public void SendRequest(string Url)
    {
        HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(Url);
        myRequest.Method = "GET";
        myRequest.BeginGetResponse(new AsyncCallback(GetResponseCallBack), myRequest);


        allDone.WaitOne();



    }

    private void GetResponseCallBack(IAsyncResult ar)
    {
        HttpWebRequest request = (HttpWebRequest)ar.AsyncState;

        // End the operation
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(ar);
        Stream streamResponse = response.GetResponseStream();
        StreamReader streamRead = new StreamReader(streamResponse);
        string responseString = streamRead.ReadToEnd();
        streamResponse.Dispose();
        streamRead.Dispose();

        Data = responseString;

        response.Dispose();        


        allDone.Set();

    }

我从MainPage.xaml.cs按钮事件处理程序调用此函数。我想做的是将一个文本框(或其他控件)更改为填充从该方法返回的数据。我需要文本框在收到数据后更新。。。有人能帮我吗?

ManualResetEvent.WaitOne
阻止线程等待
ManualResetEvent.Set

只需删除ManualResetEvent并从
GetResponseCallBack
更新文本块。要更新它,您需要类似这样的内容(因为在UI线程中不会调用回调):

另一个选项是使用or使
SendRequest
方法异步

更新


你可能想看看这门课。它类似于HttpWebRequest的新异步版本。我想这就是方法。

ManualResetEvent.WaitOne
阻止线程等待
ManualResetEvent.Set

只需删除ManualResetEvent并从
GetResponseCallBack
更新文本块。要更新它,您需要类似这样的内容(因为在UI线程中不会调用回调):

另一个选项是使用or使
SendRequest
方法异步

更新


你可能想看看这门课。它类似于HttpWebRequest的新异步版本。我想这就是方法。

ManualResetEvent.WaitOne
阻止线程等待
ManualResetEvent.Set

只需删除ManualResetEvent并从
GetResponseCallBack
更新文本块。要更新它,您需要类似这样的内容(因为在UI线程中不会调用回调):

另一个选项是使用or使
SendRequest
方法异步

更新


你可能想看看这门课。它类似于HttpWebRequest的新异步版本。我想这就是方法。

ManualResetEvent.WaitOne
阻止线程等待
ManualResetEvent.Set

只需删除ManualResetEvent并从
GetResponseCallBack
更新文本块。要更新它,您需要类似这样的内容(因为在UI线程中不会调用回调):

另一个选项是使用or使
SendRequest
方法异步

更新



你可能想看看这门课。它类似于HttpWebRequest的新异步版本。我认为这是一条路。

@user3138251这是System.Windows.Deployment。这样行吗?这不在WP8.1中,对吗?此外,我还编辑了我的答案,并添加了另一个解决方法。我在Windows Phone 8.1中无法做到这一点吗@yasen@user3138251我添加了WP8.1的信息。好吧,对不起,我对异步的东西真的很陌生。。。所以我得到了这个警告:“因为这个呼叫没有等待,当前方法的执行在呼叫完成之前继续。考虑将‘等待’操作符应用到呼叫的结果。”我不知道如何解决这个问题……记住一件事。当您不等待异步操作时,
会发生异常,而
任务将无法观察到异常,并将异常吞没在System.Windows.Deployment中。这样行吗?这不在WP8.1中,对吗?此外,我还编辑了我的答案,并添加了另一个解决方法。我在Windows Phone 8.1中无法做到这一点吗@yasen@user3138251我添加了WP8.1的信息。好吧,对不起,我对异步的东西真的很陌生。。。所以我得到了这个警告:“因为这个呼叫没有等待,当前方法的执行在呼叫完成之前继续。考虑将‘等待’操作符应用到呼叫的结果。”我不知道如何解决这个问题……记住一件事。当您不等待异步操作时,
会发生异常,而
任务将无法观察到异常,并将异常吞没在System.Windows.Deployment中。这样行吗?这不在WP8.1中,对吗?此外,我还编辑了我的答案,并添加了另一个解决方法。我在Windows Phone 8.1中无法做到这一点吗@yasen@user3138251我添加了WP8.1的信息。好吧,对不起,我对异步的东西真的很陌生。。。所以我得到了这个警告:“因为这个呼叫没有等待,当前方法的执行在呼叫完成之前继续。考虑将‘等待’操作符应用到呼叫的结果。”我不知道如何解决这个问题……记住一件事。当您不等待异步操作时,
会发生异常,而
任务将无法观察到异常,并将异常吞没在System.Windows.Deployment中。这样行吗?这不在WP8.1中,对吗?此外,我还编辑了我的答案,并添加了另一个解决方法。我在Windows Phone 8.1中无法做到这一点吗@yasen@user3138251我添加了WP8.1的信息。好吧,对不起,我对异步的东西真的很陌生。。。所以我得到了这个警告:“因为这个呼叫没有等待,当前方法的执行在呼叫完成之前继续。考虑将‘等待’操作符应用到呼叫的结果。”我不知道如何解决这个问题……记住一件事。当您不等待异步操作时,如果发生异常,
任务将无法观察到并吞下该异常
//Windows Phone 8.0:
Deployment.Current.Dispatcher.BeginInvoke(delegate() {
    //Update UI here
});

//Windows Phone 8.1:
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate() {
    //Update UI here
});