我的MFC程序远程一个WMP实例来捕获WMP事件,并使用IWMPCore
, IWMPCore3
, IWMPPlaylistCollection
, IWMPMediaCollection
使用COM与WMP交互。远程实例正在工作,并且可以捕获事件,但是当我开始获取所有歌曲(几乎5100首歌曲)的所有细节时,WMP停止响应,直到我的应用程序获取所有歌曲并释放所有上述实例。谁能帮我解决这个问题,怎么才能解决?
WMP ActiveX控件是一个STA COM对象,所以所有的交互(方法调用)都要经过实例化线程,在大多数情况下是UI线程。也就是说,无论您对接口做什么,调用都会在调用期间阻塞GUI。
你需要在你的活动中间泵窗口消息来解除阻塞UI(显示进度并让用户点击取消按钮),或者创建一个初始化为STA的工作线程,并使用次级不可见的WMP实例在那里获取集合细节。