void SetProgramAndContinue(IDebugEvent2 programCreatedEvent, IDebugProgram3 program)
 {
     _debugSessionContext.DebugProgram = program;
     _taskContext.RunOnMainThread(
         () => _debugSessionContext.DebugEngine.ContinueFromSynchronousEvent(
             programCreatedEvent));
     _debugSessionContext.ProgramState = ProgramState.Running;
 }
        void HandleDebugProgramCreated(IDebugEvent2 programCreatedEvent, IDebugProgram3 program)
        {
            var         breakpoints = _bindPendingBreakpoints();
            Func <bool> predicate   = () => breakpoints.All(b => b.Ready);

            _jobQueue.Push(_observeAndNotifyJobFactory.Create(
                               predicate, () => SetProgramAndContinue(programCreatedEvent, program),
                               "Waiting for breakpoints to be bound."));
        }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    public void Broadcast (IDebugEvent2 debugEvent, IDebugProgram3 program, IDebugThread3 thread)
    {
      Broadcast (debugEvent, program as IDebugProgram2, thread as IDebugThread2);
    }