/// <summary> /// Fires the InvokeCanceled event. /// </summary> /// <param name="details">Invocation details</param> /// <param name="ex">Exception</param> private void Invoke_FireInvokeCanceledEvent(InvocationDetails details, Exception ex) { details.ExceptionThrown = true; var args = new InvokeCanceledEventArgs { TrackingID = details.TrackingID, CancelException = ex }; _host.OnInvokeCanceled(args); throw args.CancelException.PreserveStackTrace() ?? new InvokeCanceledException(); }
/// <summary> /// Verarbeitet BeforeInvoke-Abos (falls welche registriert sind). /// </summary> /// <param name="trackingID">Aufrufschlüssel zur Nachverfolgung</param> /// <param name="interfaceName">Name der Komponentenschnittstelle</param> /// <param name="delegateCorrelationSet">Korrelationssatz für die Verdrahtung bestimmter Delegaten und Ereignisse mit entfernten Methoden</param> /// <param name="methodName">Methodenname</param> /// <param name="args">Parameter</param> private void ProcessBeforeInvoke(Guid trackingID, ref string interfaceName, ref List <DelegateCorrelationInfo> delegateCorrelationSet, ref string methodName, ref object[] args) { // Wenn BeforeInvoke-Abos vorhanden sind ... if (_host.HasBeforeInvokeSubscriptions()) { // Ereignisargumente für BeforeInvoke erstellen BeforeInvokeEventArgs cancelArgs = new BeforeInvokeEventArgs() { TrackingID = trackingID, InterfaceName = interfaceName, DelegateCorrelationSet = delegateCorrelationSet, MethodName = methodName, Arguments = args, Cancel = false }; // BeforeInvoke-Ereignis feuern _host.OnBeforeInvoke(cancelArgs); // Wenn der Aufruf abgebrochen werden soll ... if (cancelArgs.Cancel) { // Wenn keine Abbruchausnahme definiert ist ... if (cancelArgs.CancelException == null) { // Standard-Abbruchausnahme erstellen cancelArgs.CancelException = new InvokeCanceledException(); } // InvokeCanceled-Ereignis feuern _host.OnInvokeCanceled(new InvokeCanceledEventArgs() { TrackingID = trackingID, CancelException = cancelArgs.CancelException }); // Abbruchausnahme werfen throw cancelArgs.CancelException; } else // Wenn der Aufruf nicht abgebrochen werden soll ... { // Einstellungen der Ereignisargumente übernehmen interfaceName = cancelArgs.InterfaceName; delegateCorrelationSet = cancelArgs.DelegateCorrelationSet; methodName = cancelArgs.MethodName; args = cancelArgs.Arguments; } } }
/// <summary> /// Fires the InvokeCanceled event. /// </summary> /// <param name="details">Invocation details</param> /// <param name="ex">Exception</param> private void Invoke_FireInvokeCanceledEvent(InvocationDetails details, Exception ex) { details.ExceptionThrown = true; var args = new InvokeCanceledEventArgs { TrackingID = details.TrackingID, InterfaceName = details.InterfaceName, DelegateCorrelationSet = details.DelegateCorrelationSet, MethodName = details.MethodName, Arguments = details.Args, CancelException = ex }; _host.OnInvokeCanceled(args); throw args.CancelException.PreserveStackTrace() ?? new InvokeCanceledException(); }