我写了一个简短的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); } }