【问题标题】:C# Speech Synthesis issueC# 语音合成问题
【发布时间】:2015-07-09 07:37:27
【问题描述】:

自昨晚以来,我遇到了一个让我陷入困境的问题。我决定,为了让我的程序尽可能地对用户友好,我应该进行一些异常处理,以便用户知道它为什么不工作。但是,无论我如何尝试捕获 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 语句结构并非如此。任何提示将不胜感激。

带有 catch Exception ex 和 Argument Exception ext 的结果:

【问题讨论】:

  • 尝试以catch (Exception ex) 开头;如果可行,请尝试catch (ArgumentException ex)
  • 同意,使用顶级Exception 看看它是否对您的收获有影响
  • @EBrown 添加的图像显示异常仍然被抛出,此时它们应该是一个消息框。
  • 异常现在被捕获。忘记了 VS 并不总是使用调试器抑制异常,我尝试在 VS 之外运行程序并显示正确的消息。
  • 只是调试设置导致执行中断,而您没想到会这样?查看 DEBUG 菜单,然后查看 Exceptions 并取消“Thrown”列中您不希望它中断的任何内容

标签: c# wpf text-to-speech speech-synthesis


【解决方案1】:

Stewart_R、Psudonym 和 EBrown 都帮助回答了这个问题。 需要更改调试设置以反映我希望如何处理某些异常。并且 Try Catch 方法是更好的方法,而不是 If Else 语句。我必须确保捕获到我想要的特定异常,在本例中是 ArgumentException。 谢谢你们的帮助。我真的很感激。

【讨论】:

    猜你喜欢
    • 2013-12-23
    • 2015-11-18
    • 2010-12-14
    • 2013-11-30
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2011-01-04
    相关资源
    最近更新 更多