2010-03-15 4 views
3

В настоящее время я разрабатываю приложение для платформы Windows, которое сможет воспроизводить видеоролики Quick Time. Целевые версии ОС - Windows XP, Windows Vista и Windows 7.Правильно удалите элемент управления QuickTime

Я успешно использовал 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 «Попытка чтения/записи защищенной памяти»;

Мои вопросы:

  • Почему это происходит только на Vista, и Windows 7?

  • На XP есть скрытая утечка?

  • Каков рекомендуемый способ утилизации элемента управления (с его объектом фильма), когда он создается во время выполнения?

Я теперь с помощью явного Movie.Disconnect() вызова (хотя я сейчас не то, что это разъединение означает, что я не мог найти надлежащую документацию) с помощью под паром вызовом QuickTimeTerminate() до того, как форма закрыто. В то время как мой метод работает, это своего рода разлочка дизайна, поэтому я хотел бы знать лучший способ сделать это.

Спасибо, MOSU»

Update: Я только что обнаружил, что мой метод не реза. Я использую для игроков: контроль QuickTime и управление проигрывателем Windows Media (как ActiveX), так и когда один из них не воспроизводит файл, используется другой. Я видел выход проигрывателя WindowsMedia и думал, что methos IS работает. Так что мое исправление не работает вообще.

+0

Yuck, довольно мутный контроль. Попытайтесь скрывать свою форму, а не удалять ее. –

+0

Спасибо за ответ. Я не могу этого сделать, потому что все остальные элементы управления (включая панель, на которой сидит элемент управления) расположены. Приложение находится в зрелом состоянии. Меня попросили добавить эти функции. Так что это не вариант. – mosu

+0

У меня такая же проблема, к сожалению –

ответ

1

Многие люди, похоже, имеют эту ошибку.

Эта страница предлагает интересный подход: http://www.theusenetarchive.com/usenet-message-how-to-properly-destroy-quicktime-activex-object-10384503.htm

Катастрофа происходит из дескрипторов файлов до сих пор является открытым.  Я был «выгружать» фильмы из элемента управления Quicktime, проводя пустую строку в свойство FileName или URL.   Quicktime не обрабатывает этот правильно и оставляет исходный файл открытым.   Так что вместо этого я подключил путь к фактическому файлу изображения (Quicktime тоже делает изображения), который был весь черный.   Eveything кажется прекрасным сейчас.

Смежные вопросы