【问题标题】:Exception not being caught in try-catch异常未在 try-catch 中捕获
【发布时间】:2020-02-28 12:53:12
【问题描述】:

我在一行代码周围有一个 try-catch,它可以生成异常,但是,catch 没有捕获它。我仍然得到一个未处理的异常。这是为什么呢?

在此示例中,我已经有一个位于 C:\temp\defect.bmp 的图像,当我尝试使用相同的路径保存图像时,我在昏暗的 imageStream 代码行上收到 System.IO.IOException,因为我错误地使用了 CreateNew 模式,所以这应该会抛出异常,但是为什么 Catch ex as Exception 没有捕获它呢?

Class MainWindow

    Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
        Dim image As New WpfImage("C:\TEMP\defect.bmp")

        Try
            Dim imageStream As New IO.FileStream("C:\TEMP\defect.bmp", IO.FileMode.CreateNew)

            image.Save(imageStream, ImageFormat.BMP)

        Catch ex As Exception
            MsgBox("This exception has been caught: " & ex.Message)
        End Try
    End Sub
End Class

【问题讨论】:

  • 只是为了确定:异常不是来自New WpfImage("C:\TEMP\defect.bmp")吗?
  • WpfImage 是什么?它不是框架的一部分。

标签: wpf vb.net exception try-catch


【解决方案1】:

我发现了这个问题。我正在使用一个有自己的异常类的 API(用于 WPFImage)。我在其名称空间的文件顶部有一个导入,所以在我的 try-catch 中,它不是 System.Exception,它是 API 名称空间中的异常。我对制作 API 的公司感到相当失望,因为他们拥有自己的同名 Exception 类。

我将代码更改为: 将 ex 捕获为 System.Exception

然后它可以正常工作并正确捕获异常。

【讨论】:

  • 你为什么要使用这样的第三方库?仅使用 WPF 即可轻松加载和保存不同格式的图像。
  • 它是我开始用于工作的机器视觉软件包。
  • 在我看来,重复使用名称 Exception 是一个糟糕的设计,即使它位于命名空间中也是如此,因为可能会出现与您观察到的完全相同的问题。我建议向软件包维护者提出有关它的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多