Моя программа MFC удаляет экземпляр WMP, чтобы поймать события WMP и использует IWMPCore
, IWMPCore3
, IWMPPlaylistCollection
, IWMPMediaCollection
для взаимодействия с WMP с использованием COM. Удаленный экземпляр работает находкой, и он может поймать события, но когда я начал получать все детали всех песен (почти 5100 песен), WMP перестает отвечать на запросы до тех пор, пока мое приложение не выберет все песни и не выпустит все вышеприведенные экземпляры. Кто-нибудь может помочь мне решить проблему и как ее можно исправить?WMP interfacace блокирует WMP от взаимодействия пользователя
0
A
ответ
2
Управление WMP ActiveX является объектом STA COM, поэтому все взаимодействия (вызовы методов) проходят через поток создания, который в большинстве случаев является потоком пользовательского интерфейса. То есть, независимо от того, что вы делаете с интерфейсами, GUI вызовов блокирует время вызова.
Вам необходимо либо вывести сообщения окна окна в середине вашей активности, чтобы разблокировать пользовательский интерфейс (показать прогресс и нажать кнопку «Отменить»), либо создать рабочий поток, инициализированный как STA, и получить сведения о сборке, используя дополнительный невидимый экземпляр WMP там.
На самом деле я просто переместил код WMP COM в поток, отличный от основного потока. Это отлично работает. :) – Durgesh