gpt4 book ai didi

windows-phone-7 - 如何在主线程中获取异步结果

转载 作者:行者123 更新时间:2023-12-04 20:54:11 40 4
gpt4 key购买 nike

我正在 Windows Phone 7 应用程序上制作登录页面。当登录错误消息从异步线程上的服务器返回时,我想在登录页面上获取登录错误状态代码。

所以我的问题是:
在下面的代码示例中,请让我知道如何在 Main 方法中获得“responseString(string)”?

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetrequeststream.aspx

using System;
using System.Net;
using System.IO;
using System.Text;
using System.Threading;

class HttpWebRequestBeginGetRequest
{
private static ManualResetEvent allDone = new ManualResetEvent(false);

public static void Main(string[] args)
{


// Create a new HttpWebRequest object.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com/example.aspx");

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

// Set the Method property to 'POST' to post data to the URI.
request.Method = "POST";

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

// Keep the main thread from continuing while the asynchronous
// operation completes. A real world application
// could do something useful such as updating its user interface.
allDone.WaitOne();

/* I'd like to get "responseString" here. */
}

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

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

Console.WriteLine("Please enter the input data to be posted:");
string postData = Console.ReadLine();

// 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 static 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(); /* I'd like to get this responseString in Main method. */
Console.WriteLine(responseString);
// Close the stream object
streamResponse.Close();
streamRead.Close();

// Release the HttpWebResponse
response.Close();
allDone.Set();
}
}

最佳答案

你可以定义 responseString作为类级变量而不是在 GetResponseCallback 中定义它方法。这样,就可以从类中的任何地方访问它,而不仅仅是方法范围。

要从后台线程导航到另一个页面,您可以使用 Dispatcher .

    //Method to move to next page. Can be called from GetResponseCallBack
private void NavigateToNextPage()
{
Dispatcher.BeginInvoke(() =>
{
NavigationService.Navigate(new Uri("Page2.xaml", UriKind.Relative"));
});
}

关于windows-phone-7 - 如何在主线程中获取异步结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6563882/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com