2010-07-30 6 views
2

Je crée un utilitaire qui me permet de contrôler iTunes (via la bibliothèque COM) avec des raccourcis clavier. Les raccourcis clavier fonctionnent, et le contrôle d'iTunes, comme le suivi suivant et précédent tous les travaux.C# + iTunes COM: l'événement iTunes est parfois levé, généralement pas

L'autre partie de cet utilitaire est d'afficher les notifications pour les changements de chanson. Grâce à quelques lectures et expérimentations, j'ai trouvé que le bon événement sur le iTunesAppClass était OnPlayerPlayEvent, et ainsi quand j'ai accroché cela aux notifications de bac, cela a fonctionné absolument parfaitement. Le problème que j'ai est que la majorité écrasante du temps que j'exécute mon programme, cet événement ne semble pas être soulevé du tout. Rarement, cependant, sans aucun changement à mon code, l'événement est levé et mon info-bulle apparaît.

Voici comment configurer mon objet iTunes:

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

Et c'est le gestionnaire d'événements:

private void itunes_OnPlayerPlayEvent(object iTrack) 
{ 
    IITTrack track = iTrack as IITTrack; 
    CurrentTrack = track; 

    // ... notification. 
} 

Toutes les idées? Après l'avoir essayée un peu plus, il semble que les événements se déclenchent lorsqu'une nouvelle instance d'iTunes s'ouvre et que mon application se connecte à cette instance pour la première fois. C'est-à-dire que si iTunes et mon utilitaire (avec les notifications de travail) sont ouverts, si je ferme et rouvre mon utilitaire, ses notifications ne fonctionneront pas. Cependant, si je ferme et rouvre iTunes, alors mon utilitaire, les notifications fonctionneront.

Cela semble être le problème, car si je ferme mon utilitaire, puis j'essaie de fermer iTunes, iTunes me dira que l'interface de script est toujours utilisée par les applications (même si ce n'est pas) . Il semble donc qu'iTunes ne déclenche l'événement que pour la première application enregistrée, ou qu'iTunes essaye de déclencher l'événement pour une application inexistante, échoue et s'arrête avant de le déclencher pour les autres applications.

Donc, ce que je devrais demander est, est-il un moyen de désinscrire mon application avec iTunes lors de la sortie? Ou peut-être même désinscrire tous les les applications enregistrées sauf le mien?

Répondre

3

@ Og- En fait, je ne trouve une solution au problème:

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

    // Release the COM object. 
    Marshal.ReleaseComObject(itunes); 
} 

J'appelle la méthode Destroy sur l'événement FormClosing du formulaire, de sorte qu'il publiera chaque fois que je ferme l'application. Il devrait être plutôt trivial de traduire ce code en VB.NET.

+0

Courir dans le même problème moi-même, si cela fonctionne, je reviendrai et plus un vous :) –

+0

A travaillé comme un charme :) bonne trouvaille! –