Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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# 如何使一个方法暂停其执行,直到以前调用的带有异步回调的方法完成_C#_Xaml_Windows Phone 8 - Fatal编程技术网

C# 如何使一个方法暂停其执行,直到以前调用的带有异步回调的方法完成

C# 如何使一个方法暂停其执行,直到以前调用的带有异步回调的方法完成,c#,xaml,windows-phone-8,C#,Xaml,Windows Phone 8,我正在开发一个应用程序,其中用户在文本框中输入一个句子。我使用TextBox.Text方法将TextBox中的文本作为字符串获取,并调用getTranslation方法,该方法根据需要在内部调用多个异步回调 建立到服务器的连接 向后置流写入请求 从服务器获取响应回调 处理响应 将响应返回到xaml页面 在应用程序的xaml页面中,我首先调用将输入文本作为param传递的第一个方法。然后,下一行代码调用return-response方法,并将TextBlock内容设置为返回的响应 这些是我用来调用

我正在开发一个应用程序,其中用户在文本框中输入一个句子。我使用TextBox.Text方法将TextBox中的文本作为字符串获取,并调用getTranslation方法,该方法根据需要在内部调用多个异步回调

建立到服务器的连接 向后置流写入请求 从服务器获取响应回调 处理响应 将响应返回到xaml页面 在应用程序的xaml页面中,我首先调用将输入文本作为param传递的第一个方法。然后,下一行代码调用return-response方法,并将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页面中的返回方法等待(即第2行)更新文本块,直到收到响应(即第1行更新搜索结果字符串?

仅同步重写方法。您只需要在OutputTextBox中显示继续运行程序。因此,应等待获取数据的过程

但如果在此过程中需要执行其他操作,则可以使用任务:

通过该类,您可以将对象TResult分配给操作的返回,因此请检查您的状态并按照您想要的方式进行操作,例如通过属性: 公共布尔已完成{get;}

这会告诉你在线搜索是否完成

除此属性外,还有一些方法,如Wait,它实际上是等待任务完成执行,即等待方法SearchOnline更新OutputTextBox

我想重申,研究Class System.Threading.Tasks.Task的特性是非常好的

我希望这有助于: