在运行时检测上下文死锁开关

本文关键字:死锁 开关 上下文 检测 运行时 | 更新日期: 2023-09-27 17:56:32

C# 代码从C++ dll 检索属性值,此检索会阻止当前线程,直到 dll 返回该值。在调试模式下,当检索需要很长时间时,MDA 会抛出 ContextDeadlockSwitch。

我想不可能在运行时捕获 ContextDeadlockSwitch,但是有没有办法让类似于 MDA 的机制可以抛出类似的异常,C# 可以捕获该异常来检测此死锁?

原因是让 C# 代码提示用户要么继续等待几秒钟,要么强制终止并重新启动应用。

在运行时检测上下文死锁开关

您可以在不同的线程中使用超时的等待来执行对C++ dll 的调用手动复位事件以表示完成;如果达到超时,您可以询问用户是否要继续。请注意,如果 DLL 的 COM 对象位于 STA 中,则可能需要在为其保留的单元中创建该对象,并跨编组,以防止它在外出吃午饭时冻结 GUI 线程。