C#语音合成问题
C# Speech Synthesis issue
我 运行 遇到了一个问题,从昨晚开始我就陷入了困境。我决定,为了让我的程序尽可能对用户友好,我应该做一些异常处理,这样用户就会知道它为什么不工作。但是,无论我如何尝试捕获 System.Argument 异常,它仍然会被抛出。我不是在找人给我一些代码来解决这个问题,我真的很想有人解释为什么会这样,这样我就知道将来该怎么做才能处理这类问题。
using System.Speech.Synthesis;
namespace SpeechProject
{
/// <summary>
/// Interaction logic for EnglishChinese.xaml
/// </summary>
public partial class EnglishChinese : Page
{
public EnglishChinese()
{
InitializeComponent();
}
private void speakBtn_Click(object sender, RoutedEventArgs e)
{
SpeechSynthesizer synth = new SpeechSynthesizer();
try
{
synth.SelectVoice("Microsoft Hanhan Desktop");
synth.Speak(spokenWords.Text);
}
catch (ArgumentException)
{
MessageBox.Show("You need to install the China Chinese Simplified Language Pack to use this feature");
}
}
}
}
然后我尝试了一种与此不同的方法。我尝试了 if else 组合。虽然,我很确定我没有用那个 if 语句做正确的事情。但它确实适用于使用 "Microsoft Zira Desktop" 但不适用于其他人。
public partial class EnglishChinese : Page
{
public EnglishChinese()
{
InitializeComponent();
}
private void speakBtn_Click(object sender, RoutedEventArgs e)
{
SpeechSynthesizer synth = new SpeechSynthesizer();
if (synth.Voice.Name == "Microsoft Huihui Desktop")
{
synth.SelectVoice("Microsoft Huihui Desktop");
synth.Speak(spokenWords.Text);
}
else
{
MessageBox.Show("You need to install the China Chinese Simplified Language Pack to use this feature");
}
}
}
}
// 当我点击按钮时它会自动抛出消息框
这相当令人困惑,因为如果它适用于一个人,那么它应该适用于所有人,但这种 if 语句结构并非如此。任何提示将不胜感激。
捕获异常 ex 和参数异常 ext 的结果:
Stewart_R、Psudonym 和 EBrown 都帮助回答了这个问题。
需要更改调试设置以反映我希望如何处理某些异常。 Try Catch 方法是比 If Else 语句更好的方法。我必须确保捕获到我想要的特定异常,在本例中是 ArgumentException。
谢谢你们的帮助。非常感谢。
我 运行 遇到了一个问题,从昨晚开始我就陷入了困境。我决定,为了让我的程序尽可能对用户友好,我应该做一些异常处理,这样用户就会知道它为什么不工作。但是,无论我如何尝试捕获 System.Argument 异常,它仍然会被抛出。我不是在找人给我一些代码来解决这个问题,我真的很想有人解释为什么会这样,这样我就知道将来该怎么做才能处理这类问题。
using System.Speech.Synthesis;
namespace SpeechProject
{
/// <summary>
/// Interaction logic for EnglishChinese.xaml
/// </summary>
public partial class EnglishChinese : Page
{
public EnglishChinese()
{
InitializeComponent();
}
private void speakBtn_Click(object sender, RoutedEventArgs e)
{
SpeechSynthesizer synth = new SpeechSynthesizer();
try
{
synth.SelectVoice("Microsoft Hanhan Desktop");
synth.Speak(spokenWords.Text);
}
catch (ArgumentException)
{
MessageBox.Show("You need to install the China Chinese Simplified Language Pack to use this feature");
}
}
}
}
然后我尝试了一种与此不同的方法。我尝试了 if else 组合。虽然,我很确定我没有用那个 if 语句做正确的事情。但它确实适用于使用 "Microsoft Zira Desktop" 但不适用于其他人。
public partial class EnglishChinese : Page
{
public EnglishChinese()
{
InitializeComponent();
}
private void speakBtn_Click(object sender, RoutedEventArgs e)
{
SpeechSynthesizer synth = new SpeechSynthesizer();
if (synth.Voice.Name == "Microsoft Huihui Desktop")
{
synth.SelectVoice("Microsoft Huihui Desktop");
synth.Speak(spokenWords.Text);
}
else
{
MessageBox.Show("You need to install the China Chinese Simplified Language Pack to use this feature");
}
}
}
}
// 当我点击按钮时它会自动抛出消息框
这相当令人困惑,因为如果它适用于一个人,那么它应该适用于所有人,但这种 if 语句结构并非如此。任何提示将不胜感激。
捕获异常 ex 和参数异常 ext 的结果:
Stewart_R、Psudonym 和 EBrown 都帮助回答了这个问题。 需要更改调试设置以反映我希望如何处理某些异常。 Try Catch 方法是比 If Else 语句更好的方法。我必须确保捕获到我想要的特定异常,在本例中是 ArgumentException。 谢谢你们的帮助。非常感谢。