如何从视频播放器的辅助线程在主窗口中显示
How to display in a Primary window from a secondary thread for a video player
我正在创建一个视频播放器应用程序,该应用程序具有 C# 中的 UI,C++ 中的视频解码和显示 (DirectX)。
C++代码编译为 DLL,并与 C# UI 接口。
为了保持正确的显示帧速率,我需要在 DLL 或 C# 中创建C++辅助线程,该线程可以执行准确的计时并以正确的间隔调用显示函数。
但是,创建辅助线程以显示到主线程(从 C# GUI)创建的窗口会产生访问冲突并导致崩溃。
但是,如果我在 C# 中使用计时器对象进行显示,播放器可以工作,但由于它的粗粒度,我无法保持正确的帧速率。
处理这个问题的好解决方案是什么?
我认为您遇到的崩溃是由于您无法从主线程外部访问 Windows 窗体控件这一事实引起的。
考虑使用 Control.Invoke() 在主线程上调用所需的执行。
请记住,Control.Invoke()
使用 Windows 的消息队列来传递请求,因此预计会出现一些不准确之处。
相关文章:
- 自 Windows 10 20H1 以来,具有单独线程的多个窗口停止工作
- 如何从单独的线程控制 SFML 窗口?
- DirectX 窗口通过多窗口和多线程快速闪烁
- 如何将C++ dll 在 C# 窗口窗体应用程序下的工作线程中运行
- 在工作线程中使用 QT 主窗口
- 是否可以从其他线程隐藏qt小部件窗口
- 是否可以使用标准的C 线程而不是FLTK超时来更新窗口
- C++从异步线程更新窗口
- 将工作线程信号与主窗口插槽 (Qt5) 连接时出错
- 使用第二个线程快速更新 GUI 窗口会通过调整窗口大小或移动窗口而崩溃
- 将程序(.EXE)作为线程 - 窗口C 执行
- SDL2在不同线程中的两个窗口
- 2个线程 - 一个带有OpenGL窗口的线程,第二个带有WXWIDGETS的窗口
- SIGSEGV 信号处理程序不是从辅助线程 c++ 窗口调用的
- Qt 窗口包含提升线程标头失败
- 两个窗口-一个由线程随机输出修改
- 如果最初发出 IO 的线程在窗口 8 下的 ReadFile 中阻塞,则 GetQueuedCompletionStatus 无法将 IO 从 IOCP 中取消排队
- 关闭其他线程的对话框后无法从主窗口聚焦
- C++ 中窗口线程的异常输出
- c++多线程窗口GUI(访问窗体)