protected virtual void RaiseKeyboardChangedEvent(KeyboardChangedEventArgs e)
{
// I do this in all to avoid a possible race condition
// https://msdn.microsoft.com/en-us/library/w369ty8x.aspx
var handler = OnKeyboardChangedEvent;
handler?.Invoke(this, e);
}
}