2

私は、iTunes Windows COM API を使用して iTunes とやり取りするための小さな C Sharp プログラムを作成しています。プログラムは、iTunes の起動前と iTunes の終了後に実行する必要があります。OnQuittingEvent を使用して iTunes がいつ終了するかを検出したいと考えています。

    private void itunes_OnQuittingEvent()
    {
        // Remove any handlers from the iTunes COM object.
        app.OnPlayerPlayEvent -= itunes_OnPlayerPlayEvent;
        app.OnQuittingEvent -= itunes_OnQuittingEvent;
        bniTunesRunning = false;
        // Release the COM object.
        app = null;
        Console.WriteLine("iTunes Closing!");
    }

ただし、C Sharp プログラムを実行している状態で iTunes を閉じると、「1 つまたは複数のアプリケーションが iTunes スクリプト インターフェイスを使用しています」という警告メッセージが表示され、iTunes が閉じる前に 20 秒のカウントダウンが表示されます。

私の質問: iTunes Windows COM OnQuittingEvent イベント ハンドラーを使用して、iTunes アプリケーションを閉じた時点で C シャープ コードの iTunesApp オブジェクト参照をインスタンス化解除して、その警告メッセージを画面に表示しないようにすることはできますか?? その警告メッセージを完全に抑制する方法はありますか?

同様の質問がここで尋ねられました:アプリケーションを閉じるときに「このアプリケーションにはまだアクティブな COM オブジェクトがあります」というエラーを抑制する方法は? ただし、コードは C Sharp ではなく C++ です。

ありがとうございました。

4

1 に答える 1

1

ダイアログが表示されないようにするには、ランタイム呼び出し可能ラッパーの参照カウントを減らしてから、iTunesAppClass 参照のコレクションを強制する必要があります。詳細については、ユーザー Bonj の投稿を参照してください。彼らの例とは異なり、収集する前に iTunesAppClass 参照を null に設定する必要がないことがわかりました。ただし、実装に依存する場合があります。また、COM オブジェクトを 1 つしか参照していないため、ループで RCW をデクリメントする必要がないこともわかりました。私のアプリケーションで動作する例を次に示します。

var app = new iTunesLib.iTunesAppClass();

// do stuff

System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
System.GC.Collect();
于 2013-04-24T03:50:53.267 に答える