/// <summary> /// Raises the <see cref="ButtonPressed"/> or <see cref="ButtonReleased"/> event. /// </summary> /// <param name="sender">The <see cref="NRF24"/> that raised the event.</param> /// <param name="buttonState">The state of the button.</param> protected virtual void OnButtonEvent(NRF24 sender, ButtonState buttonState) { if (this.onButton == null) { this.onButton = new ButtonEventHandler(this.OnButtonEvent); } if (buttonState == ButtonState.Pressed) { // Program.CheckAndInvoke helps event callers get onto the Dispatcher thread. // If the event is null then it returns false. // If it is called while not on the Dispatcher thread, it returns false but also re-invokes this method on the Dispatcher. // If on the thread, it returns true so that the caller can execute the event. if (Program.CheckAndInvoke(ButtonPressed, this.onButton, sender, buttonState)) { this.ButtonPressed(sender, buttonState); } } else { if (Program.CheckAndInvoke(ButtonReleased, this.onButton, sender, buttonState)) { this.ButtonReleased(sender, buttonState); } } }