【发布时间】: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