我正在使用一个我不熟悉的相当大且复杂的代码库,它使用DirectWrite进行文本渲染。我不知道这是否重要,但这是一个 WinRT(Windows 应用商店)应用程序。
该应用程序是多线程的,并且一些 DirectX 调用是从后台(不是 UI)线程完成的。所有的BeginDraw和EndDraw调用都是从UI 线程进行的,并且一些DrawText调用是从后台线程进行的。我确保这些调用都没有重叠,并且 DrawText 仅在 BeginDraw 和 EndDraw 对之间调用。
但是,有时我在调用 DrawText 方法时会收到SEHException 。从UI 线程调用时它永远不会发生,只有在从后台线程调用时才会发生。
这不会发生在每台计算机上。它经常发生在某些人身上,而在其他人身上根本无法复制。
VS 调试器所说的确切消息是这样的:“x.DLL 中发生了'System.Runtime.InteropServices.SEHException' 类型的第一次机会异常”,它发生在我调用ID2D1DeviceContext.DrawText()函数和调试器时在 DrawText 调用中中断 d2d1.h 头文件。
当抛出 SEHException 时,有什么方法可以调试或诊断出了什么问题?(这显然与从后台线程调用 DrawText 函数有关。)
除此之外,从后台线程调用 DirectX 函数是否有任何一般规则?(我确保使用 D2D1_FACTORY_TYPE_MULTI_THREADED 选项创建 D2D1Factory。)