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用于处理和绘制,但解码器是我们自己的。关于如何保持唇形同步有什么建议吗?