2010-07-30 13 views
2

我正在製作一個實用程序,允許我用熱鍵控制iTunes(通過COM庫)。熱鍵工作,並控制iTunes,像下一個和上一個跟蹤所有的工作。C#+ iTunes COM:iTunes事件有時會升高,通常不會

此實用程序的另一部分是顯示歌曲更改時間的通知。通過一些閱讀和實驗,我發現iTunesAppClass上的正確事件是OnPlayerPlayEvent,所以當我把它掛在托盤通知上時,它的工作非常完美。

我遇到的問題是絕大多數時候我運行我的程序,該事件似乎並沒有被提出。但是,很少,沒有任何更改我的代碼,事件引發和我的工具提示出現。

這是怎麼設置我的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和我的實用程序(帶有工作通知)都打開了,應關閉並重新打開我的實用程序,它的通知將不起作用。但是,如果我關閉並重新打開iTunes,那麼我的實用程序,通知將工作。

這似乎是問題,因爲如果我關閉了我的實用程序,然後嘗試關閉iTunes,iTunes會告訴我腳本界面仍在使用中(,即使它不是) 。

因此,似乎iTunes只會爲第一個註冊應用程序觸發事件,或者iTunes試圖針對不存在的應用程序觸發事件,並且在針對其他應用程序觸發事件之前停止並停止。

所以我應該問的是,有沒有辦法在退出時用iTunes取消註冊我的應用程序?或者甚至取消註冊全部除我的註冊申請?

回答

3

@ OG-其實我找到一個解決問題的辦法:

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

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

我呼籲窗體的FormClosing事件Destroy方法,這樣它會釋放我每次關閉應用程序。把這段代碼翻譯成VB.NET應該是相當簡單的。

+0

自己跑到相同的問題,如果這個工程,我會回來,加上一個你:) – 2015-01-30 06:25:01

+0

工作就像一個魅力:)好找! – 2015-01-30 06:27:29

相關問題