/// <summary>
 /// Creates a new instance of the CustomStepCompleteEventArgs class.
 /// </summary>
 /// <param name="processController">Which IMDbgProcessController to store in the Object.</param>
 /// <param name="callbackArgs">Which CorStepCompleteEventArgs to encapsulate in this wrapper.</param>
 public CustomStepCompleteEventArgs(IMDbgProcessController processController,
                                    CorStepCompleteEventArgs callbackArgs)
     : base(processController)
 {
     this.callbackArgs = callbackArgs;
 }
        private void StepCompleteEventHandler(Object sender, CorStepCompleteEventArgs e)
        {
            OriginalMDbgMessages.WriteLine("ManagedCallback::StepComplete");
            if (InternalHandleRawMode(ManagedCallbackType.OnStepComplete, e))
                return;

            // custom stepper handling
            if (customSteppers != null
                && customSteppers.Contains(e.Stepper))
            {
                using (var psc = new MDbgProcessStopController(this, e, false))
                {
                    var handler = (customSteppers[e.Stepper] as CustomStepperEventHandler);
                    customSteppers.Remove(e.Stepper);
                    handler(this, new CustomStepCompleteEventArgs(psc, e));
                }

                return; // this was custom stepper, no additional action necessary.
            }

            // we need to deliver step complete for cordbg skin, so that we can print
            // enhanced diagnostics. 
            if (HandleCustomPostCallback(ManagedCallbackType.OnStepComplete, e))
                return;

            // we will stop only if this callback is from our own stepper.
            if (e.Stepper == m_activeStepper)
            {
                m_activeStepper = null;
                e.Continue = false;
                InternalSignalRuntimeIsStopped(e.Thread, new StepCompleteStopReason(e.Stepper, e.StepReason));
            }
        }