C#调用异常TargetSite

C#调用异常TargetSite,c#,reflection,C#,Reflection,我有一个应用程序,有时会抛出一个异常,其中大部分是已处理的,但我希望未处理的是可恢复的。因此,我尝试使用异常的targetsite调用导致异常的方法,如下所示: Exception ex = Global.ThrownException; MethodBase mB = ex.TargetSite; try { mB.Invoke(mB, null); } catch(

我有一个应用程序,有时会抛出一个异常,其中大部分是已处理的,但我希望未处理的是可恢复的。因此,我尝试使用异常的targetsite调用导致异常的方法,如下所示:

        Exception ex = Global.ThrownException;

        MethodBase mB = ex.TargetSite;


        try
        {

            mB.Invoke(mB, null);
        }
        catch(Exception exc)
        {
            System.Windows.MessageBox.Show(exc.Message);
        }
我这样做是为了在再次向用户显示窗口之前确保异常是一次性错误

我试图调用的测试方法(以及异常targetsite)如下所示:

 public void testMethod()
    {
        throw new System.IO.IOException("test");
    }
当我运行这个程序时,会抛出一个异常消息“Object not match target type”,但由于testMethod没有任何参数,所以不应该发生这种情况


有什么想法吗?

您试图在
MethodBase
.invoke()
的第一个参数)的实例上调用该方法,该实例显然不存在。您需要传入定义
testMethod()
的对象的实例,因为它不是静态的。正如@PoweredByOrange所说,您需要传递具有调用
方法的对象。不幸的是,我不知道有什么好方法可以从异常中获取这些信息。而且,说得清楚一点,我认为这是一个有趣的问题,在“我想知道你是否真的能做到这一点?”的意义上。然而,我并不认为在实践中这样做是一个好主意。如果您有可以重试的方法,那么应该将这些方法包装成某种重试逻辑。全局捕获并重试似乎是个坏主意。我完全同意@MattBurland所说的。您试图在
MethodBase
.invoke()
的第一个参数)的实例上调用该方法,该实例显然不存在。您需要传入定义
testMethod()
的对象的实例,因为它不是静态的。正如@PoweredByOrange所说,您需要传递具有调用
方法的对象。不幸的是,我不知道有什么好方法可以从异常中获取这些信息。而且,说得清楚一点,我认为这是一个有趣的问题,在“我想知道你是否真的能做到这一点?”的意义上。然而,我并不认为在实践中这样做是一个好主意。如果您有可以重试的方法,那么应该将这些方法包装成某种重试逻辑。全球捕获并重试似乎是个坏主意。我完全同意@MattBurland所说的。