У нас есть Blazor Web UI с компонентами Mudblazor, работающий на киосковом ПК с TouchScren. Проблема заключается в том, что наши пользователи часто ставят пальцем на кнопку и просто держите их там. Таким образом, событие Onclick не стреляет, так что ничего не происходит. Затем они жалуются на то, что наш киоск не работает. /> Нормальная кнопка нажатия по -прежнему работает < /li>
< /ul>
Как я ее реализовал:
on ontouchstart Начался таймер 300 мс (или задача. Остановлен < /li>
Проверяется «_ActionExecated». Если это ложь, это немедленно установлено на TRUE, и действие выполняется. Если это уже правда, ничего не происходит, я просто возвращаюсь. < /Li>
< /ul>
Это кажется довольно простым, но даже при проверке действие иногда запускается дважды.@inherits MudButton
@ChildContent
< /code>
private async Task ExecuteAction(bool fromTimer)
{
string origin = fromTimer ? "timer" : "touch end";
if (_actionExecuted)
{
Console.WriteLine($" KioskButton - {origin} - {DataTestId} - action tried to double-fire.");
return;
}// Prevent multiple calls
_actionExecuted = true;
Console.WriteLine($"a) KioskButton - {origin} - {DataTestId} - action triggered and passed check.");
if (OnAction != null)
{
Console.WriteLine($"b) KioskButton - {origin} - {DataTestId} - performing OnAction.");
await OnAction(Parameters);
}
}
private void StartTimer()
{
StopTimer(); // Ensure no previous timer is running
_actionExecuted = false;
_cts = new CancellationTokenSource();
Task.Delay(HoldDuration, _cts.Token).ContinueWith(async t =>
{
if (!t.IsCanceled)
{
await ExecuteAction(true);
}
}, TaskScheduler.Default);
}
private async Task HandleRelease()
{
StopTimer(); // Stop the hold timer
await ExecuteAction(false); // Execute if not already triggered
}
private void StopTimer()
{
_cts?.Cancel();
_cts?.Dispose();
_cts = null;
}
< /code>
I was under the impression this code should have prevented double-firing of the action. But it does happen, actually quite often - maybe one out of 5 clicks (although when I try to reproduce it on purpose, it stops happening). Is there a way to make absolutely sure the button never double-fires?
Подробнее здесь: https://stackoverflow.com/questions/795 ... iggers-one
Blazor Custom Long нажмите кнопку - убедиться, что действие только запускает один ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Blazor Custom Long нажмите кнопку - убедиться, что действие только запускает один
Anonymous » » в форуме C# - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Blazor Custom Longpress Button - убедиться, что действие запускает только один раз
Anonymous » » в форуме C# - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Blazor Custom Longpress Button - убедиться, что действие запускает только один раз
Anonymous » » в форуме C# - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Blazor Custom Longpress Button - убедиться, что действие запускает только один раз
Anonymous » » в форуме C# - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Blazor Custom Longpress Button - убедиться, что действие запускает только один раз
Anonymous » » в форуме C# - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-