我试图使用Timer
来触发事件以通过网络发送数据。我创建了一个简单的类来调试。基本上我有一个List<string>
我想发送。我想下面的情况发生:重置System.Timers.Timer以防止Elapsed事件
- 添加字符串
List
- 开始
Timer
10秒 - 添加第二个字符串
List
前Timer.Elapsed
- 重启
Timer
回到10秒。
到目前为止,我有这样的:
public static List<string> list;
public static Timer timer;
public static bool isWiredUp = false;
public static void Log(string value) {
if (list == null) list = new List<string>();
list.Add(value);
//this does not reset the timer, elapsed still happens 10s after #1
if (timer != null) {
timer = null;
}
timer = new Timer(10000);
timer.Start();
timer.Enabled = true;
timer.AutoReset = false;
if (!isWiredUp) {
timer.Elapsed += new ElapsedEventHandler(SendToServer);
isWiredUp = true;
}
}
static void SendToServer(object sender, ElapsedEventArgs e) {
timer.Enabled = false;
timer.Stop();
}
任何想法?
从这个问题我明白,他想积累列表中的数据,并且只有自上次添加到列表已经过去10秒后才发送一次。他希望避免SendToServer被两次调用两次,如果他将数据添加到列表两次相隔三秒。我可能是错的,但是我就是这么读的。 – 2013-02-13 19:17:24
@zespri这正是我阅读它的方式。这正是这个代码所做的。 – Servy 2013-02-13 19:20:02
即使使用计时器..这是一个坏主意..没有锁定,没有同步的形式..计时器是这样做绝对最糟糕的方式,他应该重新考虑他是如何解决这个问题的。 – 2013-02-13 19:21:51