C#+ iTunes COM:iTunes事件有时会升起,通常不会

我正在制作一个实用程序,让我用热键控制iTunes(通过COM库)。 热键工作,和iTunes的控制,像下一个和上一个跟踪所有的工作。

这个工具的另一部分是显示歌曲改变时的通知。 通过一些阅读和实验,我发现OnPlayerPlayEvent上的正确事件OnPlayerPlayEvent ,所以当我把它挂在托盘通知上的时候,它绝对完美的工作。

我遇到的问题是绝大多数时候我运行我的程序,这个事件似乎并没有被提出。 但是,很less, 如果我的代码没有任何改变 ,事件就会被提出,我的工具提示就会出现。

这是我如何设置我的iTunes对象:

 itunes = new iTunesAppClass(); itunes.OnPlayerPlayEvent += new _IiTunesEvents_OnPlayerPlayEventEventHandler(itunes_OnPlayerPlayEvent); 

这是事件处理程序:

 private void itunes_OnPlayerPlayEvent(object iTrack) { IITTrack track = iTrack as IITTrack; CurrentTrack = track; // ... notification. } 

有任何想法吗?

编辑:试了一下之后,似乎事件触发了一个新的实例iTunes打开,我的应用程序连接到第一次的实例。 也就是说,如果iTunes和我的实用程序(带有工作通知)都打开了,应closures并重新打开我的实用程序,它的通知将不起作用。 但是,如果我closures并重新打开iTunes,那么我的实用程序,通知将工作。

这似乎是问题,因为如果我closures了我的实用程序,然后尝试closuresiTunes,则iTunes会告诉我脚本界面仍在被应用程序使用( 即使它不是 )。

因此,似乎iTunes只会为第一个注册的应用程序触发事件,或者iTunes试图为不存在的应用程序触发事件,失败,并在针对其他应用程序触发事件之前停止。

那么我应该问的是,有没有办法在退出时用iTunes取消注册我的应用程序? 或者,甚至可能取消注册除我以外的所有注册的应用程序?

@ OG-我确实找到了解决问题的办法:

 public void Destroy() { // Remove any handlers from the iTunes COM object. itunes.OnPlayerPlayEvent -= itunes_OnPlayerPlayEvent; // Release the COM object. Marshal.ReleaseComObject(itunes); } 

我调用Form的FormClosing事件上的Destroy方法,以便每次关闭应用程序时都会释放它。 把这段代码翻译成VB.NET应该是相当简单的。