我目前正在开发一个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上是一个隐藏的泄漏?
什么是在运行时创建控件(使用它的电影对象)时推荐的方式?
现在我使用一个明确的Movie.Disconnect()调用(虽然我不现在这是什么意思脱节,因为我无法找到适当的文件)关闭。 虽然我的方法正在工作,但它是一种设计突破,所以我想知道一个更好的方法来做到这一点。
谢谢 Mosu”
更新: 我刚刚发现我的方法不workink。我用于玩家:QuickTime控制和Windows媒体播放器控制(都是ActiveX),当一个播放文件失败时使用另一个文件。我看到了WindowsMedia播放器的输出并且认为这些方法正在工作。 所以我的修复程序根本不起作用。
Yu,相当不好的控制。尝试隐藏您的表单而不是处置它。 – 2010-03-15 16:23:54
感谢您的回复。我不能这样做,因为所有其他控件(包括控件所在的面板)都正在处理中。 应用程序处于成熟状态。我被要求添加这个功能。所以这不是一个选项。 – mosu 2010-03-15 17:09:13
不幸的是我有同样的问题 – 2012-10-10 16:51:38