我这里有一个项目,它默认设置由 MouseEnter 事件发生操作。我的意思是,打开一个窗口、关闭、返回等等,仅通过 MouseEnter 事件发生。
我被要求在 3 秒后触发事件。这意味着用户将鼠标放在控件上,仅在 3 秒后,窗口中的所有控件都必须发生该事件。
所以,我想到了一个全局计时器或类似的东西,它会返回 false,直到计时器达到 3...我认为就是这样...
天啊,有人知道我怎样才能做这样的事情吗?
Thanks!!
您可以定义一个类来公开DelayedExecute
方法,接收要执行的操作并根据延迟执行的需要创建计时器。它看起来像这样:
public static class DelayedExecutionService
{
// We keep a static list of timers because if we only declare the timers
// in the scope of the method, they might be garbage collected prematurely.
private static IList<DispatcherTimer> timers = new List<DispatcherTimer>();
public static void DelayedExecute(Action action, int delay = 3)
{
var dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
// Add the timer to the list to avoid it being garbage collected
// after we exit the scope of the method.
timers.Add(dispatcherTimer);
EventHandler handler = null;
handler = (sender, e) =>
{
// Stop the timer so it won't keep executing every X seconds
// and also avoid keeping the handler in memory.
dispatcherTimer.Tick -= handler;
dispatcherTimer.Stop();
// The timer is no longer used and shouldn't be kept in memory.
timers.Remove(dispatcherTimer);
// Perform the action.
action();
};
dispatcherTimer.Tick += handler;
dispatcherTimer.Interval = TimeSpan.FromSeconds(delay);
dispatcherTimer.Start();
}
}
然后你可以这样调用它:
DelayedExecutionService.DelayedExecute(() => MessageBox.Show("Hello!"));
or
DelayedExecutionService.DelayedExecute(() =>
{
DoSomething();
DoSomethingElse();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)