【发布时间】:2010-08-30 10:14:50
【问题描述】:
我正在尝试调试使用 WPF 的 .NET 3.5 应用程序。在我们的大多数机器上,应用程序都可以正常启动,但我们只有一台机器,应用程序在第一个.Show() 上挂起。该过程似乎随着 CPU 的使用而旋转,最终(如果我连接了调试器)我得到:
托管调试助手“ContextSwitchDeadlock”在“D:\Projects....\foobar.exe”中检测到问题。 附加信息:CLR 在 60 秒内无法从 COM 上下文 0x1aa168 转换到 COM 上下文 0x1a9ff8。拥有目标上下文/单元的线程很可能要么进行非泵送等待,要么处理非常长时间运行的操作而不泵送 Windows 消息。这种情况通常会对性能产生负面影响,甚至可能导致应用程序变得无响应或内存使用量随着时间的推移不断累积。为避免此问题,所有单线程单元 (STA) 线程都应使用泵送等待原语(例如 CoWaitForMultipleHandles)并在长时间运行的操作期间定期泵送消息。
对于上述任何转录错误,我深表歉意,我无法复制粘贴文本。
发生这种情况的系统正在运行 Windows XP SP3。我们还有其他安装了 Windows XP SP3 的系统,我们的软件在这些系统上运行良好。
挂起时的调用堆栈如下所示:
[外部代码]
PresentationNative_v0300.dll!FetchRun() + 0x90 字节 PresentationNative_v0300.dll!_LsSetParaProperties@24() + 0x71 字节
PresentationNative_v0300.dll!_LsCreateLineCore@44() + 0x12c 字节
PresentationNative_v0300.dll!_LoCreateLine@40() + 0x85 字节 foobar.exe!FooBar.Window1.Window1() 第 109 行 + 0x10 字节 C# [外部代码]
user32.dll!_InternalCallWinProc@20() + 0x28 字节
user32.dll!_UserCallWinProcCheckWow@32() + 0xb7 字节
user32.dll!_DispatchMessageWorker@8() + 0xdc 字节
user32.dll!_DispatchMessageW@4() + 0xf 字节 mscoree.dll!__CorExeMain@0() + 0x32 字节
mscoree.dll!_ShellShim__CorExeMain@0() + 0x3a4e 字节
mscoree.dll!__CorExeMain_Exported@0() + 0x8 字节
kernel32.dll!_BaseProcessStart@4() + 0x23 字节
有人知道是什么原因造成的吗?
我很快会尝试重新安装 .NET 3.5,但老实说,我们正在抓紧救命稻草。
【问题讨论】: