Blazor Custom Longpress Button - убедиться, что действие запускает только один разC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Blazor Custom Longpress Button - убедиться, что действие запускает только один раз

Сообщение Anonymous »

У нас есть 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 ... ggers-once
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Blazor Custom Longpress Button - убедиться, что действие запускает только один раз
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Blazor Custom Longpress Button - убедиться, что действие запускает только один раз
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Blazor Custom Longpress Button - убедиться, что действие запускает только один раз
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Blazor Custom Long нажмите кнопку - убедиться, что действие только запускает один
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Blazor Custom Long нажмите кнопку - убедиться, что действие только запускает один
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»