Directshow过滤访问线程

时间:2011-06-09 17:08:59

标签: c# multithreading com directshow

我使用directshowlib-2005在c#中制作了一个电视播放器。 现在我做了一个搜索可用频道的方法。

我希望这个方法在不同的线程中运行,这样我的GUI就不会冻结,但是当我尝试在方法中设置通道时出现错误。它在我的图表中找不到IAMTVTuner界面,尽管我知道它在那里。

如果我不使用其他线程,该方法可以正常工作(但我的GUI冻结了一段时间)

我知道它必须对公寓做一些事情,但有没有办法可以在不同的线程中访问该界面,然后创建我的图形的线程?

1 个答案:

答案 0 :(得分:1)

这个问题是因为DirectShowLib中的某些com类或接口应该只从上创建的相同线程访问。 因此,解决此问题的方法是实现ISynchronizeInvoke“System.ComponentModel.ISynchronizeInvoke”。

例如,如果您需要访问名为Media的类中的方法,该类在多线程模式下使用DirectshowLib内部的某些类或方法,则必须使用{{1来检查是否需要调用如果为true,则必须通过InvokeRequired方法访问它。 为了演示如何实现Invoke接口,这是我前一段时间在C#2.0中开发的代码片段

ISynchronizeInvoke