安排活动的最佳方法是什么?
本文关键字:方法 是什么 最佳 活动 | 更新日期: 2023-09-27 18:07:23
我有一个应用程序,用户可以在其中创建不同的通知,如便利贴和设置他们的开始时间。当他按下开始按钮时,计时器开始了,这些提醒应该在他们设定的时间弹出。我也找过其他的答案,比如这个,但问题是通知的时间是不同的。
那么,安排激活通知的事件的最佳方法是什么呢?对于的优点和缺点: ,我可以想到两种可能的方法。运行一个
DispatcherTimer
,它每秒滴答一次,检查通知的时间是否到了,然后弹出。优点:单个DispatcherTimer
实例。缺点:每秒钟滴答并检查所有通知是一个开销。为每个通知创建一个
DispatcherTimer
,让它们自己处理时间。优点:每个计时器只滴答一次弹出通知。缺点:太多的计时器是一个开销,可能难以控制。
我讲对了吗?就资源而言,这两种方法哪一种更好?有没有我忽略的第三种更好的方法?
编辑:如果有任何不同,通知也应该在用户定义的时间后自动关闭,并以用户定义的定期间隔重复。
我已经在c#应用程序中使用了许多方法来调度事件(线程,计时器,Quartz API…),我认为Quertz是最有效的方法。. NET API -link-是你能找到的最好的工具(至少对我来说)。它很容易使用。
作业类示例:
public class HelloJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("Greetings from HelloJob!");
}
}
网络示例:
// Instantiate the Quartz.NET scheduler
var schedulerFactory = new StdSchedulerFactory();
var scheduler = schedulerFactory.GetScheduler();
// Instantiate the JobDetail object passing in the type of your
// class. Your class needs to implement a IJob interface
var job = new JobDetail("job1", "group1", typeof(HelloJob));
// Instantiate a trigger using the basic cron syntax.
// Example : run at 1AM every Monday - Friday.
var trigger = new CronTrigger(
"trigger1", "group1", "job1", "group1", "0 0 1 ? * MON-FRI");
// Add the job to the scheduler
scheduler.AddJob(job, true);
scheduler.ScheduleJob(trigger);
你会在这里的快速入门指南中找到一个有用的代码示例。
问候。
如果通知系统将在单个进程中使用,则继续使用单个调度程序计时器。确保dispatcher计时器设置为near notification。每次创建新通知或计时器命中时,将时间更改为下一个最近的通知。
这样就可以避免每次处理。第一次当有人创建通知点计时器到那个时间。如果其他人在第一次点击之前创建了另一个通知,则将计时器更改为秒。如果第二次在第一次之后,则在调度第一次通知回调后更改定时器。如果是线程的,你可能需要努力工作来获得线程安全。
如果需要跨进程通知,使用windows任务调度程序,它已经知道如何运行计时器并按时调用我们的代码。您可能需要使用某种IPC (WCF)网络。管道,MSMQ等…)实现通知。