gpt4 book ai didi

C# 事件未被处理

转载 作者:行者123 更新时间:2023-11-30 15:11:33 25 4
gpt4 key购买 nike

我正在通过编写一个使用 iTunes COM API 的应用程序来学习 C# 事件处理。我有一个方法应该在 iTunes 停止播放歌曲时运行,但是当我通过点击“停止/暂停”按钮触发应用程序中的事件时,该方法永远不会被调用。

编辑:根据 dboarman 的回复,我删除了 while 循环。现在事件确实得到处理,但前提是我在运行 PlayPlaylist() 之前重新启动 iTunes。如果我第二次运行 PlayPlaylist(),停止事件将不再被触发/处理。

void trayIcon_Click(object sender, EventArgs e)
{
PlayPlaylist();
}

public static void PlayPlaylist()
{

itapp = new iTunesApp();
itapp.OnPlayerStopEvent +=
new _IiTunesEvents_OnPlayerStopEventEventHandler(itapp_OnPlayerStopEvent);

lastPlaylist = itapp.LibraryPlaylist;

itapp.Play();
}

static void itapp_OnPlayerStopEvent(object iTrack)
{
Debug.WriteLine("Stop Event fired");
//...
}

在 Pastebin 中更新源代码 here (第 59-68 行是相关的)。

规范:我的应用程序应该从头到尾播放 Genius 推荐播放列表中的歌曲(默认情况下,iTunes 不会连续播放 Genius 推荐)。 StopEvent 应该触发播放列表中的下一首歌曲。

最佳答案

这是有问题的完整代码:

public static void PlayPlaylist()
{
itapp = new iTunesApp();
itapp.OnPlayerStopEvent += new _IiTunesEvents_OnPlayerStopEventEventHandler(itapp_OnPlayerStopEvent);

lastPlaylistID = itapp.LibraryPlaylist.playlistID;
Debug.WriteLine("Last playlist:");
Debug.WriteLine(lastPlaylistID);

itapp.Play();

while (true)
{
System.Threading.Thread.Sleep(1000);
}
}

我怀疑 while 循环导致事件永远不会触发,因为线程将休眠一秒钟,而且因为 true 是,好吧......总是 true。

我会将您的播放列表放入列表中。像这样的东西:

static List<myTrack> Tracks;

public static void PlayPlaylist()
{
itapp = new iTunesApp();
itapp.OnPlayerStopEvent += new _IiTunesEvents_OnPlayerStopEventEventHandler(itapp_OnPlayerStopEvent);

foreach (myTrack track in Tracks)
{
// perform play
}
}

看看它如何为您服务。

关于C# 事件未被处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2249760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com