3

我已经添加了这段代码

        iTunes.OnPlayerPlayingTrackChangedEvent += new _IiTunesEvents_OnPlayerPlayingTrackChangedEventEventHandler(iTunes_OnPlayerPlayingTrackChangedEvent);

和这段代码

private void iTunes_OnPlayerPlayingTrackChangedEvent(object iTrack)
    {
        if (iTunes.CurrentTrack != null)
        {
            if (iTunes.CurrentTrack.Artist != null & iTunes.CurrentTrack.Album != null & iTunes.CurrentTrack.Name != null)
            {
                artist = iTunes.CurrentTrack.Artist;
                album = iTunes.CurrentTrack.Album;
                title = iTunes.CurrentTrack.Name;

                if (!NowPlaying.IsBusy)
                {
                    NowPlaying.RunWorkerAsync();
                }
            }
        }
    }

到我用 c# 编写的应用程序,但在歌曲更改时它没有捕捉到。我错过了什么吗?

有没有其他方法可以捕捉 iTunes 曲目更改事件?

4

3 回答 3

5

您实际上订阅了错误的事件来捕获此信息。

这是一个代码片段,它将为您提供所需的内容:

        iTunesApp app = new iTunesApp();

    public Form1()
    {
        InitializeComponent();
        app.OnPlayerPlayEvent += new _IiTunesEvents_OnPlayerPlayEventEventHandler(app_OnPlayerPlayEvent);   
    }

    public void app_OnPlayerPlayEvent(object iTrack)
    {
        IITTrack currentTrack = (IITTrack)iTrack;
        string trackName = currentTrack.Name;
        string artist = currentTrack.Artist;
        string album = currentTrack.Album;

    }
于 2010-01-08T18:05:18.487 回答
1

我想出了一个让它工作的方法。

首先我添加了一个计时器

然后每 1 秒检查一次

try 
{
if (iTunes.CurrentTrack.Artist != artist | iTunes.CurrentTrack.Album != album | iTunes.CurrentTrack.Name != title)
{
 //Code to update UI here
}
}
catch
{
//Nothing Here! this is just so your the app doesn't blow up if iTunes is busy. instead it will just try again in 1 second
}

就是这样 :)

于 2009-08-07T03:51:50.053 回答
1

你应该使用“或”,而不是“和”。在您的代码中,它只会报告艺术家和专辑以及歌曲名称是否发生变化。那是你要的吗?(因为如果我在同一张专辑中播放另一首歌曲,UI 将不会更新)。

于 2009-08-16T16:12:45.833 回答