2

我正在编写一个小的 C Sharp 程序来使用 iTunes Windows COM api 与 iTunes 交互。我的程序必须在 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 时,我收到一条警告消息:“一个或多个应用程序正在使用 iTunes 脚本界面”,然后在 iTunes 关闭前倒计时 20 秒。

我的问题:我可以使用 iTunes Windows COM OnQuittingEvent 事件处理程序在我关闭 iTunes 应用程序时在我的 C 语言代码中取消实例化 iTunesApp 对象引用,因此屏幕上不会出现该警告消息吗?有没有办法完全抑制该警告信息?

这里提出了一个类似的问题:关闭应用程序时如何抑制“此应用程序中仍有活动的 COM 对象”错误?但代码是 C++ 而不是 C Sharp。

谢谢你。

4

1 回答 1

1

为了防止出现对话框,您需要减少运行时可调用包装器引用计数,然后强制收集 iTunesAppClass 引用。有关更多详细信息,请参见用户 Bonj 的帖子。与他们的示例不同,我发现没有必要在收集之前将 iTunesAppClass 引用设置为 null。但是,可能取决于您的实施。我还发现我不必在循环中减少 RCW,因为我只引用了一个 COM 对象。这是一个适用于我的应用程序的示例:

var app = new iTunesLib.iTunesAppClass();

// do stuff

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