C#代码从C ++ dll检索属性值,此检索会阻止当前线程,直到dll返回该值。在调试模式下,当检索需要很长时间时,MDA会抛出ContextDeadlockSwitch。
我想在运行时捕获ContextDeadlockSwitch是不可能的,但是有一种方法可以使类似于MDA的机制抛出一个C#可以捕获的类似异常来检测这种死锁吗?
原因是让C#代码提示用户继续等待几秒钟或强行终止并重新启动应用程序。
答案 0 :(得分:1)
您可以在另一个线程中执行对C ++ dll的调用,使用 ManualResetEvent上的等待超时来表示完成;如果达到超时,您可以询问用户是否要继续。请注意,如果DLL的COM对象位于STA中,您可能需要在为其保留的公寓中创建对象并对其进行编组,以防止它在用于午餐时冻结GUI线程。