// The timer ticked. public void Tick(object info) { HOHEventObj.UpdateExerciseTimer(this.TimerCounter--); if (this.TimerCounter < 0) { HOHEventObj.UpdateExerciseState(false); } }
public void Execute(MRNetwork NW) { ExecuteStatus = true; exerciseRunning = true; HOHEvent.ProtocolStateUpdated += OnHOHEventUpdate; HOHEvent.ExerciseStateUpdated += OnExerciseStateUpdated; this.NW = NW; for (int i = 0; i < this.Repetitions; i++) { HOHEventObj.UpdateLogMsg("EXERCISE: START!"); HOHEventObj.UpdateLogMsg("Executing exercise: " + this.Name); if (this.PreState != null && ExecuteStatus) { HOHEventObj.UpdateLogMsg("Setting Prestate: " + this.PreState.Name); this.PreState.execute(NW); } if (this.TargetState != null && ExecuteStatus) { HOHEventObj.UpdateLogMsg("Target State: " + this.TargetState.Name); HOHEventObj.UpdateUsrMsg(this.UserMsg); sf = new SFListener(this.TargetState, Int32.Parse(this.SFCode), this.ExerciseTime, this); Thread SFThread = new Thread(() => sf.Execute(NW)); SFThread.Start(); exerciseRunning = true; while (exerciseRunning) { } // SFThread.Interrupt(); //Thread.Sleep(this.ExerciseTime * 1000); sf.InterruptListener(NW); //SFThread.Interrupt(); //sf = null; } if (this.PostState != null && ExecuteStatus) { HOHEventObj.UpdateLogMsg("Setting PostState: " + this.PostState.Name); this.PostState.execute(NW); } HOHEventObj.UpdateLogMsg("EXERCISE: DONE!"); } HOHEvent.ProtocolStateUpdated -= OnHOHEventUpdate; HOHEvent.ExerciseStateUpdated -= OnExerciseStateUpdated; HOHEventObj.UpdateExerciseState(true); HOHEventObj.UpdateExerciseTimer(0); }