When calling a Multicast Delegate one should use GetInvocationList to call one by one the delegate:
public void IterateAll()
{
if( _doExecute != null )
Is the type of the delegate fixed? You'll need to either use quite a bit of reflection, or you need to implement one version for each possible parametercount just like there is one Action<...> type for it.
Should look similar to this(untested notepad code):
public static Action WrapAction(Action a)
{
var invList = ((MultiCastDelegate)a).GetInvocationList();
for (int i = 0; i < invList.Length; i++)
{
invList[i] = ()=>{try invList[i] catch {...} });
}
return (Action)MulticastDelegate.Combine(invList);
}
And you probably need to add special case handling for single cast delegates.