简体   繁体   中英

Exception has been thrown by the target of an invocation (MethodBase.Invoke Method)

I want to catch the exceptions that are thrown in methods called with invoke method.

public void TestMethod()
{
   try     
   {
       method.Invoke(commandHandler, new[] { newCommand });
   }
   catch(Exception e)
   {     
       ExceptionService.SendException(e);
   }
}

method.Invoke calls the following method:

public void Register(/*parameters*/)
{
     if(test_condition())
          throw new CustomException("Exception Message");
}

The problem is that when I catch the CustomException, in the TestMethod, the e variable on the catch statement has NOT the type CustomException. It has the following message: "Exception has been thrown by the target of an invocation".

I want to catch the exception that has been raised (which is CustomException), and pass it to the ExceptionService mechanism.

What am I doing wrong?

Yes, you're calling the method via reflection. So as per the documentation , a TargetInvocationException will be thrown if the target method throws an exception.

Just use the InnerException property to obtain - and potentially throw - the original exception.

So for example:

try     
{
    method.Invoke(commandHandler, new[] { newCommand });
}
catch (TargetInvocationException e)
{     
    ExceptionService.SendException(e.InnerException);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM