C# 有没有办法对多个事件使用一个计时器?
我在C#NET 3.5中 当计时器过期并执行事件处理程序时会发生什么? 计时器停止存在了吗?C# 有没有办法对多个事件使用一个计时器?,c#,timer,event-handling,.net-3.5,C#,Timer,Event Handling,.net 3.5,我在C#NET 3.5中 当计时器过期并执行事件处理程序时会发生什么? 计时器停止存在了吗? 我是否可以在一个计时器上注册不同时间的多个事件,以期望它们都一个接一个地触发?您可以将计时器设置为仅触发事件一次或继续触发事件(timer.AutoReset属性)。是的,您可以在一个计时器上注册几个不同的事件处理程序,但我不知道有任何方法可以知道它们将触发什么顺序。如果这对您很重要,请设置一个处理程序,并让该处理程序调用其他处理程序。如果您试图调用不同的处理程序,每次计时器关闭时,我建议设置一个处理程
我是否可以在一个计时器上注册不同时间的多个事件,以期望它们都一个接一个地触发?您可以将计时器设置为仅触发事件一次或继续触发事件(timer.AutoReset属性)。是的,您可以在一个计时器上注册几个不同的事件处理程序,但我不知道有任何方法可以知道它们将触发什么顺序。如果这对您很重要,请设置一个处理程序,并让该处理程序调用其他处理程序。如果您试图调用不同的处理程序,每次计时器关闭时,我建议设置一个处理程序,该处理程序保留一个枚举,指示要调用哪个函数,并在计时器每次调用时递增该函数。 要调用同一个处理程序来“迭代”参数列表,在每个间隔结束后,我会有一个数组或参数列表,处理程序只会增加一个计数器或使用该列表
using System.Timers;
public class MyTimedDelete {
private static List<int> ListOfIds=null;
private static System.Timers.Timer myTimer=null;
public static void AddIdToQueue(int id)
{
if (ListOfIds == null)
{
ListOfIds = new List<int>();
myTimer = new System.Timers.Timer(2000);
myTimer.Elapsed += OnTimedEvent;
}
ListOfIds.Add(id);
if (ListOfIds.Count==1)
{
myTimer.Start();
}
}
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
deleteItem(ListOfIds[0]);
ListOfIds.RemoveAt(0);
if (ListOfIds.Count == 0) {
myTimer.Stop();
}
}
}
使用系统定时器;
公共类MyTimedDelete{
私有静态列表ListOfIds=null;
私有静态System.Timers.Timer myTimer=null;
公共静态void addedtoqueue(int-id)
{
if(ListOfIds==null)
{
ListOfIds=新列表();
myTimer=新系统计时器计时器计时器(2000);
myTimer.appeased+=OnTimedEvent;
}
添加(id);
if(ListOfIds.Count==1)
{
myTimer.Start();
}
}
私有静态void OnTimedEvent(对象源,ElapsedEventArgs e)
{
deleteItem(ListOfIds[0]);
ListOfIds.RemoveAt(0);
if(ListOfIds.Count==0){
myTimer.Stop();
}
}
}
计时器只能计时一个时间间隔。这足以对任意数量的事件计时,您只需将间隔设置为到期的最早时间。@Grant我同意,如果不处理/删除它,它不应停止存在。我还假设,它(记录几个滴答声)应该是可能的。但这种行为可能取决于计时器的类型。我知道在.NET中有3个(+1个asp)。所以我想知道,他们中的哪一个能在预期的时间距离内为我提供所需的独立活动。@Hans你能不能重新表述一下“你只需将间隔设置为到期的最早间隔”。我不确定我是否正确理解你的意思。假设你今天有4个约会,而你只有一个手表。你能准时参加所有的4场比赛吗?只需在代码中执行相同的操作。我需要使用不同的参数(要删除的消息的id)启动相同的处理程序。在不同的时间?相同的时间间隔还是不同的时间间隔?那么像我在上面的答案中添加的代码应该可以工作。对吗?这个解决方案是已知的。您建议在SomeFunction中创建新的计时器,但我需要一个通用计时器,以便在消息到达时启动额外的倒计时(相同周期)。当周期结束时,计时器将启动以msgId为参数的已结束事件处理程序。该消息将从队列中删除。然后,这只是我所拥有的消息的扩展。我已经在上面的代码中详细展开了。如果您有这样一个类,那么可以从代码中的任何地方调用MyTimedDelete.AdddToQueue(x);要向队列添加id并使定时事件在经过一段时间后使用该id调用deleteItem函数。我还没有建立这个类,所以我可能有打字错误。由您来构建和测试。