C# 调用外部构造函数时应用程序挂起--疑难解答步骤?

C# 调用外部构造函数时应用程序挂起--疑难解答步骤?,c#,.net,wpf,dll,avalonedit,C#,.net,Wpf,Dll,Avalonedit,这可能不太可能,但我已经没有主意了 我有一个VSC解决方案,其中有三个项目。有一个类库项目和两个依赖于该类库的应用程序项目。类库又依赖于其他几个dll,包括sharpdevelop项目中的avalonedit dll 其中一个应用程序正在构建并运行良好,包括使用我自己的控件包装AvaloneEdit控件。另一个应用程序无法运行,并且在通过包装控件中的XAML初始化AvaloneEdit控件时,它似乎失败了 问题是我在调试输出中根本没有看到任何错误,我看到的只是加载了dll的消息,然后什么也没有。

这可能不太可能,但我已经没有主意了

我有一个VSC解决方案,其中有三个项目。有一个类库项目和两个依赖于该类库的应用程序项目。类库又依赖于其他几个dll,包括sharpdevelop项目中的avalonedit dll

其中一个应用程序正在构建并运行良好,包括使用我自己的控件包装AvaloneEdit控件。另一个应用程序无法运行,并且在通过包装控件中的XAML初始化AvaloneEdit控件时,它似乎失败了

问题是我在调试输出中根本没有看到任何错误,我看到的只是加载了dll的消息,然后什么也没有。如果我进入控件的构造函数,那么这个步骤永远不会完成。调试器表示应用程序正在运行,但当基本编辑控件由XAML端构造时,它显然在avalonedit dll中的某个位置旋转

我不得不假设这两个项目之间的环境差异存在一些问题,但我有点困惑于如何继续追踪问题。我是否必须设法安排一些事情,以便我可以中断avalonedit源代码


编辑:如果我暂停/中断所有操作,它只会返回到调用我的控件构造函数的行。

听起来像是死锁。仔细查看所有线程、它们的堆栈跟踪和同步原语(锁、信号量等)。请记住:争用的资源可能不是显式的(例如,当您在静态构造函数中等待试图访问所构造类型的静态字段的内容时,您会遇到死锁)

有很多方法可以引入死锁,但没有简单的建议来处理它。您还可以在VisualStudio中启用所有异常的中断(调试->异常…并勾选CLR异常)


如果这没有帮助,您可以在此处提供堆栈跟踪,也许有人可以发现问题。

如果在挂起期间暂停调试器,会发生什么情况?这就是方便的地方!我建议选择AvalonEdit的源代码(和/或PDB),然后点击调试器中的暂停按钮查看问题。另一种方法是使用Reflector(如Mayank所建议的)检查avalonedit构造函数源,以查看循环的潜在原因。