窗口窗体C#文本框在按下按钮时不显示返回字符串
我有一个窗口窗体应用程序,它将在另一个文件(Voice.cs)中执行一个函数,并在按下按钮时在文本框中显示结果。 但是,它不会在我的文本框中显示字符串,并且我的应用程序被冻结。 我能知道这件事带来了什么吗 这是我在form.cs中按下的按钮以执行该功能窗口窗体C#文本框在按下按钮时不显示返回字符串,c#,task,C#,Task,我有一个窗口窗体应用程序,它将在另一个文件(Voice.cs)中执行一个函数,并在按下按钮时在文本框中显示结果。 但是,它不会在我的文本框中显示字符串,并且我的应用程序被冻结。 我能知道这件事带来了什么吗 这是我在form.cs中按下的按钮以执行该功能 private void VoiceStart_Click_2(object sender, EventArgs e) { string command = Voice.RecognizeSpeechAsync().Res
private void VoiceStart_Click_2(object sender, EventArgs e)
{
string command = Voice.RecognizeSpeechAsync().Result;
VoiceBox.Text = command;
}
这是我在Voice.cs中执行语音识别的程序代码:
class Voice
{
public static async Task<string> RecognizeSpeechAsync()
{
var config = SpeechConfig.FromSubscription("xxxxxxxxxxxxxxxxxxxxx", "southeastasia");
using (var recognizer = new SpeechRecognizer(config))
{
var result = await recognizer.RecognizeOnceAsync();
return result.Text;
}
}
}
班级语音
{
公共静态异步任务RecognizeSpeechAsync()
{
var config=SpeechConfig.FromSubscription(“XXXXXXXXXXXXXXXXXX”,“东南亚”);
使用(var识别器=新语音识别器(配置))
{
var result=await recognizer.RecognizeOnceAsync();
返回结果。文本;
}
}
}
我是否需要调整任何东西以使其显示并解冻我的应用程序
不要混合等待
和结果
,使语音开始_单击_2
异步:
//Side note: async void is a bad idea except event handlers
private async void VoiceStart_Click_2(object sender, EventArgs e)
{
string command = await Voice.RecognizeSpeechAsync();
VoiceBox.Text = command;
}
调用
Voice.RecognizeSpeechAsync().Result时正在阻止UI线程代码>-尝试将其更改为VoiceBox.Text=wait Voice.RecognizeSpeechAsync()
(并将VoiceStart\u Click\u 2()返回类型更改为async void
-必须为void,因为它是一个事件处理程序)您可能还应该将RecognizeSpeechAsync()
方法中的await更改为:var result=await recognizer.RecognizeOnceAsync().ConfigureAwait(false)代码>.Result
以及。等待
停止执行(UI),直到任务
完成,然后分配结果
等待
要求编译器实现。continue
因此UI继续工作,但是当Task
完成时,其余代码(string command=..和VoiceBox.Text=command
)将被执行,谢谢!!我有主意了