mirror of
https://github.com/immense/Remotely.git
synced 2025-10-26 11:27:15 +00:00
30 lines
890 B
C#
30 lines
890 B
C#
using System;
|
||
using System.Collections.Concurrent;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Runtime.CompilerServices;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using System.Timers;
|
||
namespace Remotely.Shared.Utilities
|
||
{
|
||
public static class Debouncer
|
||
{
|
||
private static readonly ConcurrentDictionary<object, Timer> _timers = new();
|
||
public static void Debounce(TimeSpan wait, Action action, [CallerMemberName] string key = "")
|
||
{
|
||
if (_timers.TryRemove(key, out var timer))
|
||
{
|
||
timer.Stop();
|
||
timer.Dispose();
|
||
}
|
||
timer = new Timer(wait.TotalMilliseconds)
|
||
{
|
||
AutoReset = false
|
||
};
|
||
timer.Elapsed += (s, e) => action();
|
||
_timers.TryAdd(key, timer);
|
||
timer.Start();
|
||
}
|
||
}
|
||
} |