我正在创建一个视频播放器应用程序,其中包含C#中的UI和C ++中的视频解码和显示(DirectX)。
C ++代码被编译为DLL并与C#UI连接。
为了保持正确的显示帧速率,我需要在C ++ DLL或C#中创建一个辅助线程,它可以进行精确计时并以正确的间隔调用显示功能。
但是,创建一个将显示发布到主线程(来自C#GUI)创建的窗口的辅助线程会创建访问冲突并导致崩溃。
但是,如果我在C#中使用计时器对象来显示,则播放器可以工作,但由于它的粗粒度,我无法保持正确的帧速率。
处理这个问题会有什么好处?
答案 0 :(得分:0)
我认为您遇到的崩溃是由于您无法从主线程外部访问Windows窗体控件而引起的。
考虑使用Control.Invoke()来调用主线程上所需的执行。
请记住Control.Invoke()
使用Windows'消息队列来传递请求,所以期待一些不准确之处。