如何从视频播放器的辅助线程在主窗口中显示

How to display in a Primary window from a secondary thread for a video player

本文关键字:线程 窗口 显示 视频 播放器      更新时间:2023-10-16

我正在创建一个视频播放器应用程序,该应用程序具有 C# 中的 UI,C++ 中的视频解码和显示 (DirectX)。

C++代码编译为 DLL,并与 C# UI 接口。

为了保持正确的显示帧速率,我需要在 DLL 或 C# 中创建C++辅助线程,该线程可以执行准确的计时并以正确的间隔调用显示函数。

但是,创建辅助线程以显示到主线程(从 C# GUI)创建的窗口会产生访问冲突并导致崩溃。

但是,如果我在 C# 中使用计时器对象进行显示,播放器可以工作,但由于它的粗粒度,我无法保持正确的帧速率。

处理这个问题的好解决方案是什么?

我认为您遇到的崩溃是由于您无法从主线程外部访问 Windows 窗体控件这一事实引起的。

考虑使用 Control.Invoke() 在主线程上调用所需的执行。

请记住,Control.Invoke()使用 Windows 的消息队列来传递请求,因此预计会出现一些不准确之处。