2012-02-28 15 views
2

我想在大多数时间在后台运行的C#中编写应用程序。它应该只显示一个TrayIcon。为此我找到了一个教程:http://www.simple-talk.com/dotnet/.net-framework/creating-tray-applications-in-.net-a-practical-guide/编写一个在后台运行的程序,并且每小时执行一次动作

但是我怎么能告诉我的程序每小时运行一次?什么是实现这个最好的方法。计时器?应用程序应尽可能少地使用资源,而无所事事。

谢谢

+0

[如何自动运行.NET程序,每小时]可能的重复(http://stackoverflow.com/questions/2421252/how-to-run-a-net-program-automatically-every-hour ) – ChrisF 2012-02-28 16:06:32

回答

2

问题:你正在做一个“用户空间”程序的程序,还是应该运行,即使用户没有登录?换句话说,它应该永远在吗?

基本上,你是在做一些对用户有用的事情,或者这对于将Web服务器的日志文件归档到数据库这样的业务任务?

如果是前者,请继续执行您的通知区域程序。如果是后者,则跳过通知区域程序并构建完整的Windows Service

在这两种情况下,使用计时器;资源使用将是最小的。

+0

是的,它应该始终运行并对用户登录做出反应。 我可以使用.Net Timer类作为定时器吗? – Pascal 2012-02-28 16:08:26

+0

对用户登录做出反应意味着什么?我意识到你可能不想泄露所有的东西,但是你究竟想要做什么呢? **编辑**另外,您的Windows服务应该能够通过覆盖[OnSessionChange](http://msdn.microsoft.com/zh-cn/library/system.serviceprocess.servicebase.onsessionchange.aspx) – Randolpho 2012-02-28 16:11:53

+0

来检测登录需要编写一个程序,获得有关计算机的所有信息,如CPU模型,内存,图形....它应该记录用户登录和用户注销。它也应该可以让用户在应用程序中创建一条消息。 – Pascal 2012-02-28 16:14:49

8

没有一直运行的程序,而只是每小时执行一次活动。编写一个执行该活动的程序,然后使用Task Scheduler in windows每小时计划一次。

+0

正是我要建议的 – Schwarzie2478 2012-02-28 16:04:20

+0

它有一个额外的好处,即当你的应用程序没有执行活动时,它不会消耗任何资源,因为它在那段时间并不实际运行。 – ChrisF 2012-02-28 16:05:32

+0

但应用程序应该给用户与它交互的可能性。并且应用程序应对文件系统中的更改或用户登录或注销时作出反应 – Pascal 2012-02-28 16:06:07

0

不确定处理成本,但是您可以在睡眠定时器中编码,让它在一个循环中睡眠一个小时,以便唤醒,运行,然后再次睡眠。不知道在睡觉时资源耗尽。此外,如果程序可能需要几分钟时间,则可以基于DateTime.Now DateTime对象计算睡眠时间,以便每小时在每小时醒来一次。

相关问题