Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.net是否可以捕获公共类引发的异常_Vb.net_Exception - Fatal编程技术网

VB.net是否可以捕获公共类引发的异常

VB.net是否可以捕获公共类引发的异常,vb.net,exception,Vb.net,Exception,我正在编写一个利用vb类的程序。 在某些情况下,该类确实会执行抛出新ArgumentException(“错误xyz”) 我不想编辑这个类,我希望它保持原样。 因为这个类也被其他程序使用 我的新程序应该有一个try-catch,以便捕获抛出的异常。我试图在我的主应用程序中的try-catch结构中放置来自类的命令,但是我仍然从类中得到一个异常弹出窗口,它没有被捕获 有没有办法从子类捕获抛出新异常的异常 再解释一下 我使用的是现有的代码和平设备helper.vb 该代码以 Imports US

我正在编写一个利用vb类的程序。 在某些情况下,该类确实会执行
抛出新ArgumentException(“错误xyz”)

我不想编辑这个类,我希望它保持原样。 因为这个类也被其他程序使用

我的新程序应该有一个try-catch,以便捕获抛出的异常。我试图在我的主应用程序中的try-catch结构中放置来自类的命令,但是我仍然从类中得到一个异常弹出窗口,它没有被捕获

有没有办法从子类捕获抛出新异常的异常

再解释一下 我使用的是现有的代码和平设备helper.vb 该代码以

  Imports USBControl.NativeMethods
  Imports System.Runtime.InteropServices
  Imports System.ComponentModel
  Imports System.Text

  Public NotInheritable Class DeviceHelper
其中有一个私有子集合DeviceEnabled

   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

只需创建从上述公共类派生的自己的CLA。下一步是实现如下方法:(很抱歉,这段代码是用C#编写的,但想法应该很清楚)


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

尽管我不想编辑de devicehelper.vb,但我还是做了一个变通方法 由于多个程序使用它,我不得不更改它。
我添加了一个变量hideErr,如果设置了该变量,将跳过抛出新异常。我想,要做到这一点,它的代码真的很脏,但我没有看到其他选项

所以,在try块中抛出了一个异常,而它没有进入catch块?你能提供一个基本的例子来澄清这个问题吗?在Throw语句上设置一个断点,你会发现代码运行在不同的线程上。这不是你应该捕捉到的那种异常,它很可能是由程序中的错误触发的。可能您传递了错误的设备guid或id,诸如此类。你不能捕获和处理bug,处理bug需要修复你的代码;它对kernel.dll的调用做了一些事情。你可能是对的,这是不能被抓住的,但我希望它是可能的。为什么评价这个负面的?我说这是一个肮脏的解决办法,我不认为这是一个好的解决办法。
public {fill return type} MyMethod( /* arguments */)
{
    try {
        return BaseMethod( /* arguments */);      // this method is from base class
    }
    catch(ArgumentException)
    {
    }
}