异步编程问题

public

 

 

partialclassMainPage : PhoneApplicationPage

    {

       

 

// Constructor

       

 

public MainPage()

        {

            InitializeComponent();

        }

       

 

privatevoid Request_Click(object sender, RoutedEventArgs e)

        {

           

 

//result = readStream.ReadToEnd();

           

 

//this.Dispatcher.BeginInvoke(new Action(delegate { Request.Content = result; }));

        string res =  GoogleTTS();

//其它操作

        }

       

 

privatestring GoogleTTS()

        {

           

 

ManualResetEvent AllDone = newManualResetEvent(false);

           

 

Stream fs = Application.GetResourceStream(newUri("/WebRequest;component/0000001146.wav", UriKind.Relative)).Stream;

           

 

string result = "";

           

 

try

            {

               

 

//string inFile = "audio.wav";

               

 

//FileStream fs = new FileStream(inFile, FileMode.Open);

               

 

byte[] voice = newbyte[fs.Length];

                fs.Read(voice, 0, voice.Length);

                fs.Close();

               

 

HttpWebRequest request = null;

               

 

string url = "http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=en-US";

               

 

Uri uri = newUri(url);

                request = (

 

HttpWebRequest)HttpWebRequest.Create(uri);

                request.Method =

 

"POST";

                request.ContentType =

 

"audio/L16; rate=16000";

               

 

Stream RequestStream = null;

               

 

//AllDone.Reset();

                request.BeginGetRequestStream(

 

newAsyncCallback(IrequestResult =>

                {

                    RequestStream = request.EndGetRequestStream(IrequestResult);

                   

 

using (Stream writeStream = RequestStream)

                    {

                        writeStream.Write(voice, 0, voice.Length);

                    }

                   

 

HttpWebResponse Response = null;

                    request.BeginGetResponse(

 

newAsyncCallback(IResponseResult =>

                    {

                        Response = request.EndGetResponse(IResponseResult)

 

asHttpWebResponse;

                       

 

using (HttpWebResponse response = Response)

                        {

                           

 

using (Stream responseStream = response.GetResponseStream())

                            {

                               

 

using (StreamReader readStream = newStreamReader(responseStream, Encoding.UTF8))

                                {

                                    result = readStream.ReadToEnd();

                                   

 

this.Dispatcher.BeginInvoke(newAction(() => { Request.Content =result; }));

                                }

                            }

                        }

                    }),

 

null);

                }), request);

            }

           

 

catch (Exception ex)

            {

               

 

Console.WriteLine(ex.StackTrace);

            }

           

 

//AllDone.WaitOne();--若使用该句,则会卡住,这是为什么?

           

 

return result;

        }

    }

posted @ 2013-05-22 13:59  血唱魂  阅读(172)  评论(0)    收藏  举报