В настоящее время я разрабатываю приложение для платформы Windows, которое сможет воспроизводить видео Quick Time.
Целевые версии ОС: Windows XP, Windows Vista и Windows 7.
Я успешно использовал Apple ActiveX QuickTime Control 2.0 (в C #), и все хорошо работает в Windows XP.
Однако в Vista и Windows 7 я сталкиваюсь с проблемами при правильной утилизации элемента управления.
Вот «шаги для воспроизведения»:
- я динамически создаю элемент управления Quick Time во время выполнения и помещаю его на панель;
Я успешно проигрываю видео с ним;
В какой-то момент я закрываю основную форму приложения; окна приложения разрушены, и приложение продолжит работать в фоновом режиме (выполняя такие операции, как синхронизация видео); в этот момент элемент управления располагается с использованием шаблона IDisposable; Я не могу явно удалить объект Movie (из элемента управления ActiveX), потому что получаю исключение, например: «COM-объект, который был отделен от лежащего в его основе RCW, не может быть использован.»; Я просто использую (AxQTOControlLib.AxQTControl) player.Dispose (); В Windows XP это нормально, но не в Vista и 7
Я восстанавливаю свое приложение (из панели инструментов, где оно работало в фоновом режиме) и пытаюсь снова открыть видео; В этот момент создается исключение AccessViolationException «Попытка чтения / записи в защищенную память»;
Мои вопросы:
Я сейчас использую явный вызов Movie.Disconnect () (хотя я сейчас не понимаю, что означает это отключение, потому что я не смог найти нужную документацию), за которым следует вызов QuickTimeTerminate () до закрытия формы.
Пока мой метод работает, это своего рода нарушение дизайна, поэтому я хотел бы узнать лучший способ сделать это.
Спасибо,
MOSU '
Обновление:
Я только что обнаружил, что мой метод не работает. Я использую для проигрывателей: элемент управления QuickTime и элемент управления проигрывателем Windows Media (оба ActiveX), а когда один не удается воспроизвести файл, используется другой. Я видел выход плеера WindowsMedia и думал, что метод работает.
Так что мое исправление не работает вообще.