public event DirectionChangedHandler?DirectionChanged; // 声明事件 protected virtual void OnDirectionChanged(DirectionChangedEventArgs e) { lock (privateLock) { if (DirectionChanged != null) { DirectionChanged(this, e); // 调用所有注册对象的方法 } } }
private void _directionService_OnDirectionChanged(DirectionChangedEventArgs e) { if (_directLastUpdated.HasValue && (DateTime.Now - _directLastUpdated.Value).Milliseconds <= 300) { return; } Direction = e.LastHeading; _directLastUpdated = DateTime.Now; Task.Run(() => _scavengerService.ChangeDirection(_scavengerId, Direction)); var degrees = (Direction < 0 ? Direction + 2 * Math.PI : Direction) * 180 / Math.PI; CompassString = $"{degrees:N2}°"; BearingString = degrees <= 90 ? $"N{degrees:N}°E" : degrees <= 180 ? $"S{180 - degrees:N}°E" : degrees <= 270 ? $"S{degrees - 180:N}°W" : $"N{360 - degrees:N}°W"; }