PowerToys/Wox/Helper/DispatcherExtensions.cs

57 lines
1.6 KiB
C#
Raw Normal View History

2014-01-07 19:27:51 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Threading;
2014-01-29 18:33:24 +08:00
namespace Wox
2014-01-07 19:27:51 +08:00
{
public static class DispatcherExtensions
{
private static Dictionary<string, DispatcherTimer> timers =
new Dictionary<string, DispatcherTimer>();
private static readonly object syncRoot = new object();
public static void DelayInvoke(this Dispatcher dispatcher, string namedInvocation,
Action action, TimeSpan delay,
2014-01-07 19:27:51 +08:00
DispatcherPriority priority = DispatcherPriority.Normal)
{
lock (syncRoot)
{
if (string.IsNullOrEmpty(namedInvocation))
2014-01-07 19:27:51 +08:00
{
namedInvocation = Guid.NewGuid().ToString();
}
else
{
RemoveTimer(namedInvocation);
}
var timer = new DispatcherTimer(delay, priority, (s, e) =>
{
RemoveTimer(namedInvocation);
action();
2014-01-07 19:27:51 +08:00
}, dispatcher);
timer.Start();
timers.Add(namedInvocation, timer);
}
}
public static void CancelNamedInvocation(this Dispatcher dispatcher, string namedInvocation)
{
lock (syncRoot)
{
RemoveTimer(namedInvocation);
}
}
private static void RemoveTimer(string namedInvocation)
{
if (!timers.ContainsKey(namedInvocation)) return;
timers[namedInvocation].Stop();
timers.Remove(namedInvocation);
}
}
}