错误未传播

时间:2016-01-29 09:52:55

标签: c# .net winforms

这是我的动作处理程序中的代码:

    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");
    }

以下是单击按钮时发生的情况: enter image description here

为什么它不会将异常传播到我尝试/ catch块的动作处理程序?我也试过没有同步调用Algebra.Divide(),但它是同样的错误。

2 个答案:

答案 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?