Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.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
Windows phone 7 我如何等待响应并对其进行操作?_Windows Phone 7_Webrequest_Manualresetevent_Waitone - Fatal编程技术网

Windows phone 7 我如何等待响应并对其进行操作?

Windows phone 7 我如何等待响应并对其进行操作?,windows-phone-7,webrequest,manualresetevent,waitone,Windows Phone 7,Webrequest,Manualresetevent,Waitone,我有一个新问题。我想对响应执行一些操作,但是我得到了一个NullReferenceException,因为它还没有到达。。。这是我的密码: public partial class MainPage : PhoneApplicationPage { public static string res = null; // Constructor public MainPage() { InitializeComponent(); s

我有一个新问题。我想对响应执行一些操作,但是我得到了一个NullReferenceException,因为它还没有到达。。。这是我的密码:

public partial class MainPage : PhoneApplicationPage
{
    public static string res = null;

    // Constructor
    public MainPage()
    {
        InitializeComponent();
        string Url = "http://twitter.com";
        WebRequest req = WebRequest.Create(Url);
        req.BeginGetResponse(new AsyncCallback(request_CallBack), req);
        int i = MainPage.res.Length; // NullReferenceException
    }

    void request_CallBack(IAsyncResult result)
    {
        WebRequest webRequest = result.AsyncState as WebRequest;
        WebResponse response = (WebResponse)webRequest.EndGetResponse(result);
        Stream baseStream = response.GetResponseStream();
        using (StreamReader reader = new StreamReader(baseStream))
        {
            res = reader.ReadToEnd();
            Dispatcher.BeginInvoke(() => { MessageBox.Show("The response is arrived."); });
            Dispatcher.BeginInvoke(() => { tbResponse.Text = res; });
        }
    }
}
但是当我使用ManualResetEvent类时,我的应用程序只是挂起,因为 if(dataReady.WaitOne())行。以下是ManualResetEvent类的完整代码:

public partial class MainPage : PhoneApplicationPage
{
    public static string res = null;
    ManualResetEvent dataReady;

    // Constructor
    public MainPage()
    {
        InitializeComponent();
        string Url = "http://twitter.com";
        dataReady = new ManualResetEvent(false);
        WebRequest req = WebRequest.Create(Url);
        req.BeginGetResponse(new AsyncCallback(request_CallBack), req);
        if (dataReady.WaitOne())
        {
            int i = MainPage.res.Length;
        }
    }

    void request_CallBack(IAsyncResult result)
    {
        WebRequest webRequest = result.AsyncState as WebRequest;
        WebResponse response = (WebResponse)webRequest.EndGetResponse(result);
        Stream baseStream = response.GetResponseStream();
        using (StreamReader reader = new StreamReader(baseStream))
        {
            res = reader.ReadToEnd();
            Dispatcher.BeginInvoke(() => { MessageBox.Show("The response is arrived."); });
            Dispatcher.BeginInvoke(() => { tbResponse.Text = res; });
        }
        dataReady.Set();
    }
}
因此,我的问题是:如何等待响应并对其进行操作?
(我试图使用Application.DoEvent方法,但它在WP7中不存在…

您不能将该代码

int i = MainPage.res.Length; // NullReferenceException
request\u回调
函数上


当前,您使用的是
WebRequest
的异步方法之一。如果要等待响应,只需使用等效的同步方法
GetResponse

{ 公共静态字符串res=null

// Constructor
public MainPage()
{
    InitializeComponent();
    string Url = "http://twitter.com";
    WebRequest req = WebRequest.Create(Url);
    req.BeginGetResponse(new AsyncCallback(request_CallBack), req);

}

void request_CallBack(IAsyncResult result)
{
    WebRequest webRequest = result.AsyncState as WebRequest;
    WebResponse response = (WebResponse)webRequest.EndGetResponse(result);
    Stream baseStream = response.GetResponseStream();
    using (StreamReader reader = new StreamReader(baseStream))
    {
        res = reader.ReadToEnd();
        Dispatcher.BeginInvoke(() => { MessageBox.Show("The response is arrived."); });
        Dispatcher.BeginInvoke(() => { tbResponse.Text = res; });
    }
    int i = MainPage.res.Length; //No  NullReferenceException
}

}

没错,但我的代码只是一个简化的示例。。。在
req.BeginGetResponse(新的异步回调(request\u回调),req)之后行有很多函数,它们将运行。。。所以我必须等待回应,只是我不知道如何…不,你不能
WebRequest.GetResponse
在手机的API子集中不存在。是的,这是真的,但我的代码只是一个简化的示例。。。在req.BeginGetResponse(新的异步回调(请求回调),req)之后;行有很多函数,它们将运行,它们需要响应。。。我不能把所有这些函数都放在回调函数中。
public partial class MainPage : PhoneApplicationPage
// Constructor
public MainPage()
{
    InitializeComponent();
    string Url = "http://twitter.com";
    WebRequest req = WebRequest.Create(Url);
    req.BeginGetResponse(new AsyncCallback(request_CallBack), req);

}

void request_CallBack(IAsyncResult result)
{
    WebRequest webRequest = result.AsyncState as WebRequest;
    WebResponse response = (WebResponse)webRequest.EndGetResponse(result);
    Stream baseStream = response.GetResponseStream();
    using (StreamReader reader = new StreamReader(baseStream))
    {
        res = reader.ReadToEnd();
        Dispatcher.BeginInvoke(() => { MessageBox.Show("The response is arrived."); });
        Dispatcher.BeginInvoke(() => { tbResponse.Text = res; });
    }
    int i = MainPage.res.Length; //No  NullReferenceException
}