【发布时间】:2015-12-10 09:47:23
【问题描述】:
我正在编写一个使用 vb 类的程序。
在某些情况下,此类确实会执行Throw New ArgumentException("Error xyz")
我不想编辑这个类,并希望保持原样。 由于该类也被其他程序使用。
我的新程序应该有一个 try catch 以便捕获抛出的异常。我试图将来自类的命令放入主应用程序的 try catch 构造中,但我仍然从类中弹出异常,它没有被捕获。
有没有办法从子类中捕获那些抛出新异常?
更多解释 我使用现有的和平代码 DeviceHelper.vb 该代码以
开头 Imports USBControl.NativeMethods
Imports System.Runtime.InteropServices
Imports System.ComponentModel
Imports System.Text
Public NotInheritable Class DeviceHelper
其中有一个私有子 SetDeviceEnabled
Private Shared Sub EnableDevice(ByVal handle As SafeDeviceInfoSetHandle, ByVal diData As DeviceInfoData, ByVal enable As Boolean)
确实包含一行
Throw New ArgumentException("That device can't be disabled! Look in the device manager!")
我的主程序使用了 Devicehelper.vbs,但它无法捕捉到类似的异常
Try
DeviceHelper.SetDeviceEnabled(DeviceGuid, deviceID, False)
Catch ex As Exception
Console.Writeline(ex.Message)
End Try
【问题讨论】:
-
那么,try块中抛出了异常,并没有进入catch块?你能提供一个基本的例子来澄清问题吗?
-
在 Throw 语句上设置断点,您可能会发现代码在不同的线程上运行。这不是您应该捕获的那种异常,它很可能是由您的程序中的错误触发的。也许您传递了错误的设备 guid 或 id,诸如此类。你无法捕捉和处理错误,处理错误需要修复你的代码。
-
如果设备不支持 setdeviceEnabled ,就会发生这种情况;它确实对 kernel.dll 的调用有所帮助。你可能是对的,这不能被抓住,但我希望它可能。