gpt4 book ai didi

c# - DirectShow/WPF 线程问题

转载 作者:行者123 更新时间:2023-11-30 12:52:17 25 4
gpt4 key购买 nike

我正在使用 WPF 和 DirectShow 编写应用程序,遇到了一个棘手的问题。我的应用程序通过静态方法 Start() 和 Stop() 在使用 DirectShowNet(DS 的 C# 包装器类)编写的静态类中使用 DS。我的 WPF 窗口中有一个 Windows 窗体面板(通过 WindowsFormsHost 对象),我需要将图形呈现到该面板。下面是应用程序的一般流程: Start() 方法构建图形并启动它;我传递我的 Windows 窗体面板的句柄并使用 IVideoWindow 接口(interface)呈现给它。 Start() 返回,图形在后台运行。在某个时刻,Stop() 被调用;此方法停止图形并销毁它。

只要我从同一个线程调用 Start() 和 Stop() 一切正常。但是,我需要从我的应用程序中的不同线程调用它们。在这种情况下,我在破坏图形的代码部分遇到异常(特别是,当我尝试枚举过滤器时)。我发现在使用 DirectShow 时需要使用多线程单元。使用 Windows 窗体应用程序很容易做到这一点;我只是在我的主要方法上抛出一个 [MTAThread],一切正常。

对于我的 WPF 应用程序,这显然不是一个选项。我的解决方法是在我需要调用 Start() 和 Stop() 时启动新的 MTA 线程。这摆脱了异常,但引入了另一个问题。当 Start() 方法返回时,视频从渲染面板中消失。如果我在 Start() 方法的末尾放置一个 Sleep,则视频将一直可见,直到 Sleep 结束。此外,我已经验证了该图在视频消失后继续运行。有人对如何进行有任何建议吗?谢谢。

凯文

最佳答案

抛出了哪个异常?我在猜测类似这样的事情:“调用线程无法访问此对象,因为另一个线程拥有它。”

在这种情况下,请使用正确的调度程序进行调用,如说明 here .

关于c# - DirectShow/WPF 线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4881624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com