【发布时间】:2014-05-29 10:20:11
【问题描述】:
我在 WPF Dispatcher 机制中发现了一些奇怪的行为。让我快速解释一下应用程序:
我有一个 WPF 窗口,其中包含多个托管在 WindowsFormsHosts 中的 OpenTK OpenGLControls。在 OpenGLControl 的 OnPaint 事件期间,我会渲染相应的 3D 场景。
在渲染过程中,我可能需要等待另一个线程完成。现在的问题是,在调用 Thread.Join() 期间,无论出于何种原因,Dispatcher 都会处理其他窗口消息。这导致我的应用程序出现问题,我想禁用/阻止/了解该行为。你知道这是怎么可能的吗?
在我的应用程序中,这会导致意外的 OpenGL 上下文切换,因为在处理另一个 OpenGL 控件的绘制事件时会处理不同的 OpenGL 上下文的绘制事件。
这是应用程序的调用堆栈,也许这有帮助: Callstack http://public.virtualmischa.de/bugs/paintevent-while-join.png
谢谢
迈克尔
【问题讨论】:
-
据我了解,您的问题是调度程序在您等待 Thread.Join() 时继续处理消息?
-
是的,完全正确。还有什么方法可以防止吗?
标签: c# wpf multithreading opengl