VB.net是否可以从公共类中捕获抛出的异常

时间:2015-12-10 09:47:23

标签: vb.net exception

我正在编写一个使用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

2 个答案:

答案 0 :(得分:0)

只需创建自己的clas派生自提到的公共类。下一步是实现这样的方法:(对不起,这段代码在C#中,但想法应该清楚)

public {fill return type} MyMethod( /* arguments */)
{
    try {
        return BaseMethod( /* arguments */);      // this method is from base class
    }
    catch(ArgumentException)
    {
    }
}

然后开始使用您的实现并调用您的方法。

答案 1 :(得分:-1)

我做了一个解决方法,尽管我不想编辑de devicehelper.vb 由于多个编程使用它,我不得不改变它。 我添加了一个变量hideErr,如果设置了,则跳过Throw New异常。我认为它真的很脏的代码,但我没有看到其他选择