Tôi đang cố gắng sử dụng Timer
để kích hoạt sự kiện gửi dữ liệu qua mạng. Tôi đã tạo một lớp đơn giản để gỡ lỗi. Về cơ bản tôi có một số List<string>
Tôi muốn gửi. Tôi muốn những điều sau xảy ra:Đặt lại System.Timers.Timer để ngăn sự kiện đã trôi qua
- Add chuỗi
List
- Bắt đầu
Timer
trong 10 giây - Thêm chuỗi thứ hai để
List
trướcTimer.Elapsed
- Restart
Timer
lại 10 giây.
Cho đến nay tôi có điều này:
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();
}
Bất kỳ ý tưởng?
Từ câu hỏi, tôi hiểu rằng anh ấy muốn tích lũy dữ liệu trong danh sách và gửi chúng một lần chỉ sau 10 giây kể từ lần bổ sung cuối cùng vào danh sách đã trôi qua. Anh ta muốn tránh SendToServer được gọi hai lần nếu anh ta thêm dữ liệu vào danh sách hai lần ba giây. Tôi có thể sai, nhưng đó là cách tôi đọc nó. –
@zespri Đó chính là cách tôi đọc nó. Đó là chính xác những gì mã này. – Servy
thậm chí sử dụng bộ đếm thời gian .. đây là ý tưởng tồi .. Không có khóa, không có hình thức đồng bộ hóa .. Bộ hẹn giờ là cách tồi tệ nhất để thực hiện việc này, anh ta nên xem xét lại cách giải quyết vấn đề này. –