2010-03-15 81 views
3

我目前正在开发一个Windows平台的应用程序,它将能够播放快速时间视频。 目标操作系统版本是Windows XP,Windows Vista和Windows 7.正确处置QuickTime控件

我成功地使用了Apple ActiveX QuickTime Control 2.0(在C#中),并且在Windows XP上一切正常。

但是,在Vista和Windows 7上,我正面临着正确处置控制的问题。 以下是“重现步骤”: - 我在运行时动态创建快速时间控件,并将其放置在面板上;

  • 我成功地用它播放视频;

  • 在某些时候,我关闭了应用程序的主窗体;应用程序窗口被销毁,应用程序将继续在后台运行(执行像同步视频之类的操作);此时控制使用IDisposable模式进行处理;我无法显式地处理Movie对象(来自ActiveX控件),因为我得到如下异常:“与其基础RCW分离的COM对象无法使用。”;我只是使用(AxQTOControlLib.AxQTControl)player.Dispose();在Windows XP上这是好的,但不是在Vista和7

  • 我恢复我的应用程序(从它在后台运行的工具栏),并尝试再次打开视频;此时会引发AccessViolationException“尝试读取/写入受保护的内存”;

我的问题是:

  • 这究竟是为什么只能在Vista和Windows 7?

  • 在XP上是一个隐藏的泄漏?

  • 什么是在运行时创建控件(使用它的电影对象)时推荐的方式?

由QuickTimeTerminate()调用之前休耕的形式是

现在我使用一个明确的Movie.Disconnect()调用(虽然我不现在这是什么意思脱节,因为我无法找到适当的文件)关闭。 虽然我的方法正在工作,但它是一种设计突破,所以我想知道一个更好的方法来做到这一点。

谢谢 Mosu”

更新: 我刚刚发现我的方法不workink。我用于玩家:QuickTime控制和Windows媒体播放器控制(都是ActiveX),当一个播放文件失败时使用另一个文件。我看到了WindowsMedia播放器的输出并且认为这些方法正在工作。 所以我的修复程序根本不起作用。

+0

Yu,相当不好的控制。尝试隐藏您的表单而不是处置它。 – 2010-03-15 16:23:54

+0

感谢您的回复。我不能这样做,因为所有其他控件(包括控件所在的面板)都正在处理中。 应用程序处于成熟状态。我被要求添加这个功能。所以这不是一个选项。 – mosu 2010-03-15 17:09:13

+0

不幸的是我有同样的问题 – 2012-10-10 16:51:38

回答

1

很多人似乎都有这个错误。

本页面提供了一个有趣的方法:发生http://www.theusenetarchive.com/usenet-message-how-to-properly-destroy-quicktime-activex-object-10384503.htm

崩溃,因为文件句柄,仍然是开放的。 我是 通过将空字符串 连接到FileName或URL属性从Quicktime控件“卸载”电影。   Quicktime不正确处理此 并保留原始文件处于打开状态。  因此,我将 连接到实际图像文件(Quicktime也是图像)的路径为 全黑。   Eveything现在看起来很好。