我使用directshowlib-2005在c#中制作了一个电视播放器。 现在我做了一个搜索可用频道的方法。
我希望这个方法在不同的线程中运行,这样我的GUI就不会冻结,但是当我尝试在方法中设置通道时出现错误。它在我的图表中找不到IAMTVTuner界面,尽管我知道它在那里。
如果我不使用其他线程,该方法可以正常工作(但我的GUI冻结了一段时间)
我知道它必须对公寓做一些事情,但有没有办法可以在不同的线程中访问该界面,然后创建我的图形的线程?
答案 0 :(得分:1)
这个问题是因为DirectShowLib
中的某些com类或接口应该只从在上创建的相同线程访问。
因此,解决此问题的方法是实现ISynchronizeInvoke“System.ComponentModel.ISynchronizeInvoke”。
例如,如果您需要访问名为Media
的类中的方法,该类在多线程模式下使用DirectshowLib
内部的某些类或方法,则必须使用{{1来检查是否需要调用如果为true,则必须通过InvokeRequired
方法访问它。
为了演示如何实现Invoke
接口,这是我前一段时间在C#2.0中开发的代码片段
ISynchronizeInvoke