public object Invoke(params object[] parameters) { object ret; bool wasApplied = _hook.IsApplied; try { if (wasApplied) _hook.Remove(); ret = _targetDelegate.DynamicInvoke(parameters); } finally { if (wasApplied) _hook.Apply(); } return ret; }