运行一个连续的Windows后台任务,不吃内存

我写了一个简短的C#脚本来执行我的电脑启动时。 它的function是监视iTunes,并显示一个有趣的消息作为我的Skype状态,说明我正在听什么艺术家。

它创build一个iTunesApp对象,并添加一个侦听器,该侦听器可以检测到轨道更改的时间。 问题是我需要使用while(true)循环来保持我的应用程序在后台打开,否则它只会运行和closures。 我以为这是好的,直到我看任务pipe理器,并意识到这个小程序正在使用CPU的15%-20%!

有更好的方法吗?

这是代码的核心,得到一个想法:

 static void Main(string[] args) { iTunesApp = new iTunesAppClass(); iTunesApp.OnPlayerPlayEvent += ITunesApp_OnPlayerPlayEvent; while (true) { } } private static void ITunesApp_OnPlayerPlayEvent(object iTrack) { var currentArtist = iTunesApp.CurrentTrack.Artist; if (currentArtist != LastArtist) { LastArtist = currentArtist; var message = GetMessage(currentArtist); UpdateSkypeStatus(message); UpdateLog(message); } } 

完整的项目在https://github.com/ericsundquist/SkypeTunes 。

等待ManualResetEvent ,并在程序需要关闭时设置()。 在我的例子中,下面调用Stop来结束你的程序。

 static ManualResetEvent signal; static void Main(string[] args) { iTunesApp = new iTunesAppClass(); iTunesApp.OnPlayerPlayEvent += ITunesApp_OnPlayerPlayEvent; signal = new ManualResetEvent(false); signal .WaitOne(); } public static void Stop() { signal.Set(); } private static void ITunesApp_OnPlayerPlayEvent(object iTrack) { var currentArtist = iTunesApp.CurrentTrack.Artist; if (currentArtist != LastArtist) { LastArtist = currentArtist; var message = GetMessage(currentArtist); UpdateSkypeStatus(message); UpdateLog(message); } }