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.Exceptions;
using TelegramBotBase.Form;
using static TelegramBotBase.Base.Async;
namespace TelegramBotBase.Controls
{
@ -115,7 +116,7 @@ namespace TelegramBotBase.Controls
}
public event EventHandler<ButtonClickedEventArgs> ButtonClicked
public event AsyncEventHandler<ButtonClickedEventArgs> ButtonClicked
{
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)
@ -166,7 +171,7 @@ namespace TelegramBotBase.Controls
}
OnButtonClicked(new ButtonClickedEventArgs(button));
await OnButtonClicked(new ButtonClickedEventArgs(button));
//Remove button click message
if (this.DeletePreviousMessage)
@ -219,7 +224,7 @@ namespace TelegramBotBase.Controls
return;
}
OnButtonClicked(new ButtonClickedEventArgs(button));
await OnButtonClicked(new ButtonClickedEventArgs(button));
result.Handled = true;