Update ButtonGrid.cs

- Fix for async event timings, button click got sometimes fired after Render event
This commit is contained in:
FlorianDahn 2020-05-06 20:56:38 +02:00
parent 01c19b9900
commit 9314b4c0e5

View File

@ -12,6 +12,7 @@ using TelegramBotBase.Base;
using TelegramBotBase.Enums; using TelegramBotBase.Enums;
using TelegramBotBase.Exceptions; using TelegramBotBase.Exceptions;
using TelegramBotBase.Form; using TelegramBotBase.Form;
using static TelegramBotBase.Base.Async;
namespace TelegramBotBase.Controls namespace TelegramBotBase.Controls
{ {
@ -115,7 +116,7 @@ namespace TelegramBotBase.Controls
} }
public event EventHandler<ButtonClickedEventArgs> ButtonClicked public event AsyncEventHandler<ButtonClickedEventArgs> ButtonClicked
{ {
add add
{ {
@ -127,9 +128,13 @@ namespace TelegramBotBase.Controls
} }
} }
public void OnButtonClicked(ButtonClickedEventArgs e) public async Task OnButtonClicked(ButtonClickedEventArgs e)
{ {
(this.Events[__evButtonClicked] as EventHandler<ButtonClickedEventArgs>)?.Invoke(this, e); var handler = this.Events[__evButtonClicked].GetInvocationList().Cast<AsyncEventHandler<ButtonClickedEventArgs>>();
foreach (var h in handler)
{
await Async.InvokeAllAsync<ButtonClickedEventArgs>(h, this, e);
}
} }
public async override Task Load(MessageResult result) public async override Task Load(MessageResult result)
@ -166,7 +171,7 @@ namespace TelegramBotBase.Controls
} }
OnButtonClicked(new ButtonClickedEventArgs(button)); await OnButtonClicked(new ButtonClickedEventArgs(button));
//Remove button click message //Remove button click message
if (this.DeletePreviousMessage) if (this.DeletePreviousMessage)
@ -219,7 +224,7 @@ namespace TelegramBotBase.Controls
return; return;
} }
OnButtonClicked(new ButtonClickedEventArgs(button)); await OnButtonClicked(new ButtonClickedEventArgs(button));
result.Handled = true; result.Handled = true;