我在C#(.NET 3.5 CP, VS2010)中有一个类,执行通常需要很长时间的复杂计算。一分钟后会抛出异常,指出检测到了ContextSwitchDeadlock。由于这个异常是本地化的,用我的非英语语言表达,所以我无法复制粘贴,但其含义如下:
CLR模块不能在60秒内从上下文COM...转换到上下文COM...。拥有目标上下文/公寓的子进程可能正在进行非泵等待或处理非常长时间的操作,而没有泵送Windows系统消息。
基本上,它看起来像我的应用程序正在计算并且长时间未响应Windows,Visual Studio将其关闭并报告可能会死锁。
我尝试做了一些研究,并找到了两种解决方案:
禁用Visual Studio调试器中的某些选项来检测死锁。对我无效,因为它仅适用于调试目的。
调用一些DoEvents方法,但它是针对Windows Forms而不是WPF,而我使用的是WPF。
还有建议创建单独的线程,但我完全不了解线程,不知道该怎么做。有什么建议吗?