public async void Start() { _state = PhysicalLayerSimulatorState.Running; _cancelSource.Token.Register(() => { _state = PhysicalLayerSimulatorState.Stopped; _physicalLayer.Dispose(); }); var task = new Task(() => { while (_state == PhysicalLayerSimulatorState.Running) { var sTime = DateTime.Now; _physicalLayer.Step(); var ellapsed = DateTime.Now.Subtract(sTime).TotalMilliseconds; if (ellapsed < _stepPeriod) { Thread.Sleep((int)(_stepPeriod - ellapsed)); } } } , _cancelSource.Token ); task.Start(); await task; }
public PhysicalLayerSimulator() { _physicalLayer = new global::PhysicalLayer.PhysicalLayer(); _state = PhysicalLayerSimulatorState.Stopped; }