Thực tế, có thứ gì đó được tích hợp trực tiếp vào Windows sẽ thực hiện điều đó. Nó được gọi là Windows Task Scheduler! Thay vì có một ứng dụng Windows ngồi và đợi đúng thời điểm để chạy một đoạn mã, bạn nên sử dụng tiện ích hệ thống cơ bản và lưu trữ đoạn mã để chạy trong một tệp thực thi riêng biệt: đó là dễ dàng hơn và hiệu quả hơn.
Tôi đã sử dụng Trình lập lịch tác vụ trước đó để định cấu hình ứng dụng của mình để bắt đầu theo lịch trình khá cụ thể. Cách tốt nhất để làm điều đó từ một ứng dụng .NET là sử dụng this handy little library.
Về cơ bản, để thực hiện những gì bạn đã nêu trong câu hỏi của mình, bạn cần tạo một ứng dụng Windows cung cấp GUI. GUI này nên có các tùy chọn điều chỉnh việc tạo và thay đổi Nhiệm vụ. Tác vụ sẽ khởi chạy mã mà bạn phải chạy (bạn nên lưu nó trong một tệp thực thi riêng biệt, có thể là một ứng dụng WinForms trong suốt và do đó ẩn đi.)
Đây là một số mã from the CodeProject article of the library itself minh họa cách tạo một tác vụ:
//Get a ScheduledTasks object for the local computer.
ScheduledTasks st = new ScheduledTasks();
// Create a task
Task t;
try {
t = st.CreateTask("D checker");
} catch (ArgumentException) {
Console.WriteLine("Task name already exists");
return;
}
// Fill in the program info
t.ApplicationName = "chkdsk.exe";
t.Parameters = "d: /f";
t.Comment = "Checks and fixes errors on D: drive";
// Set the account under which the task should run.
t.SetAccountInformation(@"THEDOMAIN\TheUser", "HisPasswd");
// Declare that the system must have been idle for ten minutes before
// the task will start
t.IdleWaitMinutes = 10;
// Allow the task to run for no more than 2 hours, 30 minutes.
t.MaxRunTime = new TimeSpan(2, 30, 0);
// Set priority to only run when system is idle.
t.Priority = System.Diagnostics.ProcessPriorityClass.Idle;
// Create a trigger to start the task every Sunday at 6:30 AM.
t.Triggers.Add(new WeeklyTrigger(6, 30, DaysOfTheWeek.Sunday));
// Save the changes that have been made.
t.Save();
// Close the task to release its COM resources.
t.Close();
// Dispose the ScheduledTasks to release its COM resources.
st.Dispose();
Chú ý: tùy chọn priority
không bao giờ làm việc cho tôi, luôn luôn đâm ứng dụng. Tôi khuyên bạn nên bỏ nó ra; thông thường, nó không tạo nên sự khác biệt lớn.
Có nhiều mẫu mã on the article page, một số trong đó cho thấy làm thế nào để thay đổi các thiết lập của một công tác, liệt kê tất cả Scheduled Tasks vv
Nguồn
2010-03-22 05:23:30
Rất tiếc, việc sử dụng "đồng bộ hóa" của tôi chỉ làm phức tạp mọi thứ. Nó chỉ là một ứng dụng cửa sổ mà người dùng có thể lên lịch một "nhiệm vụ" được chạy định kỳ. Tôi có một cơ sở dữ liệu để có thể lưu trữ dữ liệu ở đó. Vì vậy, việc sử dụng lớp Timer có vẻ là cách để đi, nhưng bạn phải tự kiểm tra ngày/giờ trong mã của mình? (như bộ đếm thời gian không thực sự có bất kỳ lịch dựa trên lịch trình xây dựng trong nó có vẻ) – Greg
Tôi đã chỉnh sửa câu hỏi của tôi. hãy kiểm tra. – Shoban
là có ... điều này (tức là Task Scheduler Managed Wrapper) là loại điều tôi đánh bắt ... bạn có nghĩ đây là cách tiếp cận mạnh mẽ không? Nói cách khác, nó sẽ mạnh mẽ hơn/an toàn để chỉ sử dụng Timer và viết mã kiểm tra ngày/giờ trong ứng dụng của bạn? Bởi mạnh mẽ tôi đoán tôi có nghĩa là tôi có thể giả định rằng nó sẽ làm việc trên bất kỳ máy tính mà không có bất kỳ gottchas (alberit XP, hoặc vista hoặc Windows 7 vv) – Greg