异步编程问题
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;
}
}

浙公网安备 33010602011771号