【问题标题】:context Switch Deadlock上下文切换死锁
【发布时间】:2012-01-15 06:23:00
【问题描述】:

当我在几秒钟后运行我的应用程序时,发生了这个异常。什么是异常以及如何处理此异常

CLR 无法从 COM 上下文 0x647f10 转换到 COM 上下文 0x648080 持续 60 秒。拥有目的地的线程 上下文/公寓很可能是在进行非抽水等待或 处理一个非常长时间运行的操作而不抽 Windows 消息。这种情况通常会对性能产生负面影响 甚至可能导致应用程序变得无响应或内存 使用量随着时间的推移不断累积。为了避免这个问题,所有 单线程单元 (STA) 线程应使用抽水等待 原语(例如 CoWaitForMultipleHandles)和常规泵 长时间运行期间的消息。

【问题讨论】:

  • 阅读每个单词都大写的文本很烦人
  • 对所发生事件的描述都在其中,尽管可能有点不清楚您是如何触发它的。要获得帮助,您需要更具体地了解您的应用程序的功能和构建方式。
  • 我用通用算法研究数独,也许有很多时间来寻找答案,但发生了这个异常。

标签: c#


【解决方案1】:

这通常发生在您有东西阻塞您的用户界面线程并且正在使用 COM 组件时。

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

【讨论】:

    【解决方案2】:

    根据我的经验,这是由于在 windows 窗体的主线程中有一个长时间运行的任务。考虑改用BackgroundWorker 来运行任务。这样做的直接好处是您的 UI 在任务运行时不会出现冻结。您甚至可以考虑使用ProgressChanged 事件来实现进度条。

    【讨论】:

      猜你喜欢
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 2021-07-19
      • 2011-07-23
      相关资源
      最近更新 更多