Tôi đang xây dựng một ứng dụng cửa sổ cửa sổ bằng C# và xaml. Tôi cần phải làm mới dữ liệu sau một khoảng thời gian nhất định (mang dữ liệu mới từ máy chủ). Tôi đã sử dụng ThreadPoolTimer để thực thi chức năng làm mới của tôi định kỳ như sau:Thực thi chức năng định kỳ sau khi chức năng hoàn thành nhiệm vụ
TimeSpan period = TimeSpan.FromMinutes(15);
ThreadPoolTimer PeriodicTimer = ThreadPoolTimer.CreatePeriodicTimer(async(source)=> {
n++;
Debug.WriteLine("hello" + n);
await dp.RefreshAsync(); //Function to refresh the data
await Dispatcher.RunAsync(CoreDispatcherPriority.High,
() =>
{
bv.Text = "timer thread" + n;
});
}, period);
Điều này hoạt động bình thường. Vấn đề duy nhất là nếu chức năng refresh không hoàn thành trước khi thể hiện kế tiếp của nó được gửi tới pool thread. Có cách nào để xác định khoảng cách giữa thực thi của nó.
Bước 1: Làm mới chức năng thực thi (mất bất kỳ số lượng thời gian)
Bước 2: Làm mới chức năng hoàn thành thực hiện của nó
Bước 3: Gap cho 15mins sau đó đi đến Bước chức năng 1
Refresh thực hiện. 15 phút sau khi thực thi kết thúc, nó thực thi lại.