context switch Deadlock

ali*_*ani 7 c#

当我在一秒钟之后运行我的应用程序时发生这种异常.什么是例外以及我如何处理这个例外

CLR无法从COM上下文0x647f10过渡到COM上下文0x648080达60秒.拥有目标上下文/公寓的线程很可能是在非抽空等待或处理非常长时间运行的操作而不抽取Windows消息.这种情况通常会对性能产生负面影响,甚至可能导致应用程序变得无响应或内存使用量随时间不断累积.为了避免这个问题,所有单线程单元(STA)线程都应该使用抽取等待原语(例如CoWaitForMultipleHandles)并在长时间运行操作期间定期泵送消息.

Ree*_*sey 8

如果您有阻止用户界面线程的东西,并且正在使用COM组件,则通常会发生这种情况.

这里最好的方法是将长时间运行的操作移动到后台线程中.这使您的UI响应,这也意味着COM消息可以正确泵送. BackgroundWorker是一个很好的工具.