protected override async Task ExecuteAsync(CancellationToken cancellationToken) { _hcsr04 = new Hcsr04(_triggerPin, _echoPin, _pinNumberingScheme); _prevDistance = Distance; while (!cancellationToken.IsCancellationRequested) { try { Distance = _hcsr04.Distance.Centimeters; _communicationObject.Distance = Distance; } catch { } if (_prevDistance <= _borderDistanceCentimeters && Distance > _borderDistanceCentimeters) { _communicationObject.ObjectInside?.Reset(); _communicationObject.ObjectOutside?.Set(); if (_communicationObject.BorderCrossedEvent != null) { _communicationObject.BorderCrossedEvent(this, BorderCrossed.Outside); } } else if (_prevDistance > _borderDistanceCentimeters && Distance <= _borderDistanceCentimeters) { _communicationObject.ObjectOutside?.Reset(); _communicationObject.ObjectInside?.Set(); if (_communicationObject.BorderCrossedEvent != null) { _communicationObject.BorderCrossedEvent(this, BorderCrossed.Inside); } } _prevDistance = Distance; await Task.Delay(100); } }