上下文:
我有一个使用MEF在主机应用程序中运行的WPF应用程序。这个宿主应用程序是由我工作的另一个部门开发的,他们提供给我们的是我们使用的一些程序集和C#接口。我的WPF应用程序有一个导出程序,可以导出到主机应用程序中。
问题:
我遇到的反复出现的问题是,当我在某些按钮Click事件上运行任何事件处理程序时,WPF应用程序的UI元素都会消失。所以很自然地我在其中一个处理程序的第一行放置了一个断点,并进行调试。但是我在调用堆栈中看到的只是我的行(我放置了断点),其余的调用堆栈都有外部代码。所以我试图弄清楚这是主机应用程序中的问题,还是我介绍的问题。调用堆栈只调用PresentationCore,WindowsBase,mscorlib和主机程序集,其中包含一个Native-to-Managed和一个Managed-to-Native行。
问题:
看到调用堆栈只有我的一个断点线在顶部,其余的是主机程序集或Windows程序集,这是否足以让我说问题出在主机程序集中?假设它不是任何Windows程序集。在我的断点被击中之前,UI元素消失了。
答案 0 :(得分:1)
我在调用堆栈中看到的只是我的行(我放置了断点),其余的调用堆栈都有外部代码。
这正是回调应该发生的事情:你的代码在顶部,框架代码直接在下面调用代码。
这足以让我说问题出在主机组件中吗?
不,有两个原因:
在我的断点被击中之前,UI元素会消失。
UI元素需要一个正在运行的程序才能重绘自己。这就是为什么使用断点调试UI可能会出现问题。通过向代码添加调试跟踪并在没有断点的情况下运行,可以获得更好的结果。