继续启动WPF应用程序

时间:2010-08-30 10:14:50

标签: wpf .net-3.5 hang

我正在尝试调试使用WPF的.NET 3.5应用程序。在我们的大多数机器上,应用程序启动都很好,但我们有一台机器,应用程序挂在第一个.Show()上。这个过程似乎随着CPU的全部使用而变化,最终(如果我附带调试器)我得到:

  

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

我为上面的任何转录错误道歉,我无法复制粘贴文本。

发生这种情况的系统正在运行Windows XP SP3。我们有其他系统使用Windows XP SP3,我们的软件运行良好。

挂起处的callstack看起来像这样:

  

[外部代码]
  PresentationNative_v0300.dll!FetchRun()+ 0x90字节   PresentationNative_v0300.dll!_LsSetParaProperties@24()+ 0x71 bytes
  PresentationNative_v0300.dll!_LsCreateLineCore@44()+ 0x12c bytes
  PresentationNative_v0300.dll!_LoCreateLine@40()+ 0x85字节   foob​​ar.exe!FooBar.Window1.Window1()第109行+ 0x10字节C#   [外部代码]
  user32.dll!_InternalCallWinProc@20()+ 0x28 bytes
  user32.dll!_UserCallWinProcCheckWow@32()+ 0xb7 bytes
  user32.dll!_DispatchMessageWorker@8()+ 0xdc bytes
  user32.dll!_DispatchMessageW@4()+ 0xf字节   mscoree.dll!__ CorExeMain @ 0()+ 0x32字节
  mscoree.dll!__ShellShim__CorExeMain@0()+ 0x3a4e bytes
  mscoree.dll!__ CorExeMain_Exported @ 0()+ 0x8 bytes
  kernel32.dll!_BaseProcessStart@4()+ 0x23 bytes

有没有人有什么想法会导致这种情况?

我将很快尝试重新安装.NET 3.5,但说实话,我们正抓着吸管。

1 个答案:

答案 0 :(得分:0)

http://wpfwonderland.wordpress.com/2007/08/16/clr-has-been-unable-to-transition-from-com-context-for-60-seconds/

这将帮助您打破执行。但是,您需要进一步剖析并解决问题。

HTH

相关问题