1

我编写了一个简短的 C# 脚本,以便在我的计算机启动时执行。它的功能是监控 iTunes 并显示一条有趣的消息作为我的 Skype 状态,说明我正在收听的艺术家。

它创建一个 iTunesApp 对象并添加一个侦听器,用于检测轨道何时发生变化。问题是我需要使用while(true)循环来让我的应用程序在后台打开,否则它只会运行和关闭。我认为这没问题,直到我查看任务管理器并意识到这个小程序正在使用 15%-20% 的 CPU!

有更好的方法吗?

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

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

4

1 回答 1

3

等待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);
    }
}
于 2016-08-10T22:37:34.987 回答