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。 谢谢你们的帮助。非常感谢。