2017-09-03 117 views
1

上下文:调用堆栈中的外部代码是否足以证明我的代码是否正常?

我有一个在使用MEF的主机应用程序中运行的WPF应用程序。这个主机应用程序由我工作的另一个部门开发,他们提供给我们的都是我们使用的一些程序集和C#接口。我的WPF应用程序有一个导出到主机应用程序的引导程序。

问题:

说我有反复出现的问题是,当我的一些按钮的Click事件运行任何我的事件处理程序的WPF应用程序的UI元素全部消失。所以很自然地,我在其中一个处理程序的第一行放置了一个断点,然后进行调试。但是我在调​​用堆栈中看到的全部是我的行(我放置断点的地方),而其余的调用堆栈都有外部代码。所以我想弄明白这是主机应用程序中的问题,还是我介绍的东西。调用堆栈只能调用PresentationCore,WindowsBase,mscorlib和主机程序集,其中一个Native-to-Managed和一个Managed-to-Native行。

问:

眼看调用堆栈只有我在上面一个断点行,剩下的是主机组装或Windows组件,这是足以让我说,这个问题是在主机部件?假设它没有任何Windows程序集。 UI元素在我的断点被击中之前消失。

回答

1

我在调用堆栈中看到的所有行都是我的行(我放置断点的地方),而其余的调用堆栈都有外部代码。

这正是在回调中应该发生的情况:您的代码位于顶部,框架代码直接显示在您的代码中。

这足以让我说这个问题在主机组件中吗?

否,原因有二:

  • 您的代码是负责引导自身与外部框架使用。如果无法正确执行,可能会看到外部代码中的问题。理想情况下,外部代码应该能够捕捉到这些信息,并通知您设置有问题,但即使框架抛出异常而不是优雅地失败,问题仍然存在于您的代码中,并且您的代码可能执行的操作会导致外部框架进入不一致的状态。再一次,理想情况下,外部框架应该检测到这一点,但最终的解决方案将在您的代码中。

的UI元素消失之前我遇到断点。

UI元素需要一个正在运行的程序才能重绘自己。这就是为什么使用断点调试UI可能会有问题。您可以通过向您的代码添加调试跟踪并运行无断点来获得更好的结果。

相关问题