我正在开发一个应用程序,其中用户在文本框中输入句子。我使用TextBox.Text方法将TextBox中的文本作为字符串获取,我调用一个方法getTranslation(),它在内部调用几个异步回调,因为它需要
在应用程序的xaml页面中,我首先调用第一个将输入文本作为param传递的方法。然后,下一行代码调用返回响应方法,并将TextBlock内容设置为返回的响应。
这些是用于调用服务器的方法。
public void searchOnline(string inputtxt)
{
//Lines of code
IAsyncResult writeRequestStreamCallback =
(IAsyncResult)req.BeginGetRequestStream(new AsyncCallback(RequestStreamReady), req);
}
private void RequestStreamReady(IAsyncResult ar)
{
//Lines of code
request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}
private void GetResponseCallback(IAsyncResult ar)
{
//Lines of code
IAsyncResult writeRequestStreamCallback = (IAsyncResult)serviceWebRequest.BeginGetResponse(new AsyncCallback(ServiceReady), serviceWebRequest);
}
private void ServiceReady(IAsyncResult ar)
{
//Lines of code
System.IO.StreamReader streamRead = new System.IO.StreamReader(streamResponse);
string responseString = streamRead.ReadToEnd();
searchresult = responseString;
}
public string returner()
{
return searchresult;
}
在xaml页面中,我调用以下代码
help.searchOnline(inputtextbox.Text);//line 1
outputtextbox.Text = help.returner();//line 2
outputtextbox.UpdateLayout();
我的问题是如何使xaml页面中的return方法等待,即第2行,更新文本块,直到收到响应,直到第1行更新搜索结果字符串?
答案 0 :(得分:0)
仅同步重写方法。您只想继续使用OutputTextBox中的显示运行该程序。因此,应该等待获取数据的过程。
但是如果您需要在此过程中执行其他操作,则可以使用任务: (http://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=vs.110).aspx)
通过这个类,您可以为操作的返回分配一个对象(TResult),因此请检查您的状态并按照您想要的方式进行,例如通过属性:
public bool IsCompleted {get; }
哪个会告诉你SearchOnline是否完整!
除了这个属性之外,还有像Wait这样的方法,它们确实等待Task完成执行,即等待SearchOnline方法更新OutputTextBox。
我想重申一下,研究Class System.Threading.Tasks.Task的功能是非常好的。
我希望它有所帮助:)