public void suspend(SuspendReason reason, Context context, ISection section) { status = Status.SUSPENDED; if (listener != null) { listener.handleSuspendEvent(reason, context, section); } try { blocker.WaitOne(); } finally { status = Status.RUNNING; if (listener != null) { listener.handleResumeEvent(resumeReason, context, section); } } }