Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从视频播放器的辅助线程在主窗口中显示 我在C语言中创建了一个带有UI的视频播放器应用程序,并在C++中实现了视频解码和显示(DirectX)。p> < > C++代码编译为DLL,与C.Ui接口连接。_C#_C++_User Interface_Directx - Fatal编程技术网

C# 如何从视频播放器的辅助线程在主窗口中显示 我在C语言中创建了一个带有UI的视频播放器应用程序,并在C++中实现了视频解码和显示(DirectX)。p> < > C++代码编译为DLL,与C.Ui接口连接。

C# 如何从视频播放器的辅助线程在主窗口中显示 我在C语言中创建了一个带有UI的视频播放器应用程序,并在C++中实现了视频解码和显示(DirectX)。p> < > C++代码编译为DLL,与C.Ui接口连接。,c#,c++,user-interface,directx,C#,C++,User Interface,Directx,为了保持正确的显示帧率,需要在C++ DLL或C语言中创建一个二次线程,它可以精确地计时,并在正确的时间间隔调用显示函数。p> 但是,创建一个将显示发布到主线程(从C#GUI)创建的窗口的辅助线程会导致访问冲突并导致崩溃 但是,如果我在C#中使用计时器对象来显示,播放器可以工作,但由于其粒度较粗,我无法保持正确的帧速率 处理这个问题的好办法是什么 我认为您遇到的崩溃是由于无法从主线程外部访问Windows窗体控件 考虑使用调用主线程上所需的执行 请记住,Control.Invoke()使用Win

为了保持正确的显示帧率,需要在C++ DLL或C语言中创建一个二次线程,它可以精确地计时,并在正确的时间间隔调用显示函数。p> 但是,创建一个将显示发布到主线程(从C#GUI)创建的窗口的辅助线程会导致访问冲突并导致崩溃

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


处理这个问题的好办法是什么

我认为您遇到的崩溃是由于无法从主线程外部访问Windows窗体控件

考虑使用调用主线程上所需的执行


请记住,
Control.Invoke()
使用Windows的消息队列传递请求,因此可能会出现一些不准确的情况。

但是,Control.Invoke会将调用发回消息队列。因此,您的计时不会100%准确——也就是说,此时不会执行调用,但可能会延迟几毫秒,这取决于消息队列中是否有更高优先级的消息。这可能会导致唇形同步出现问题。您有什么理由需要自己演示每个帧,而不让DirectX为您演示吗?DirectX用于处理和绘制,但解码器是我们自己的。关于如何保持唇形同步有什么建议吗?