using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Rs.MotionPlat.Flow { public class BaseFlow { public string FlowName { get; set; } protected bool b_IsRun = false; protected bool b_IsStop = true; private Task mainTask; protected int stopWaitTime = 10; protected int sleepTime = 10; public BaseFlow() { mainTask = new Task(task); } public virtual void Run() { } private void task() { while (b_IsRun) { if(b_IsStop) { Thread.Sleep(stopWaitTime); continue; } Run(); Thread.Sleep(sleepTime); } } public virtual void Stop() { b_IsStop = true; } public virtual void Quit() { if(mainTask!=null) { b_IsRun = false; mainTask.Wait(); } } public virtual void Start() { if(mainTask!=null && (mainTask.Status== TaskStatus.Created || mainTask.Status== TaskStatus.WaitingToRun)) { b_IsRun= true; b_IsStop = false; mainTask.Start(); } else if(mainTask.Status== TaskStatus.Running) { b_IsStop = false; } } } }