这是我的动作处理程序中的代码:
private async void startButton_Click(object sender, EventArgs e)
{
try
{
var expression = expressionTextBox.Text;
var result = await Task.Run(() => Algebra.Divide(expression));
resultTextBox.Text = result.Polynom.ToString();
} catch (Exception ex)
{
Logger.Error(ex.Message);
detailsTextbox.BackColor = Color.Red;
detailsTextbox.AppendText("An error occurred! Please check if your expression is valid.");
}
}
在Algebra.Divide
中,我只将抛出异常用于测试异常情况:
public static DivisionResult Divide (string expression)
{
throw new Exception("Error occured");
}
为什么它不会将异常传播到我尝试/ catch块的动作处理程序?我也试过没有同步调用Algebra.Divide()
,但它是同样的错误。
答案 0 :(得分:2)
简单地说,因为您的调试器已启用。当你在没有调试器的情况下运行代码时,它将被你的try catch块捕获。当您看到异常时,按F5时应该获得所需的行为。在catch语句中放置一个断点,您将看到您的程序将继续运行并将转到catch语句。
您还可以关闭例外中断。你可以这样做:How to turn off "Break when exception is thrown" for custom exception types
答案 1 :(得分:0)
您在任务中抛出异常。所以,Exception正在抛出不同的线程。试着看看这个问题:What is the best way to catch exception in Task?