当我关闭最后一个窗口时,我的应用程序中出现了未处理的异常:
PresentationFramework.dll中出现未处理的"System.NullReferenceException"类型异常
附加信息:未将对象引用设置为对象的实例.
只有在应用程序的生命周期中,我通过我设置的某个进程打开子窗口时才会出现这种情况.该窗口存在于另一个程序集中,该程序集在运行时使用MEF动态加载,然后使用Castle进行实例化.如果我然后调用某个方法,它会创建一个新的STA线程并打开一个WPF对话框窗口.
一些警告:
调用堆栈是:
PresentationFramework.dll!MS.Internal.Controls.ConnectionPointCookie.Disconnect()
PresentationFramework.dll!MS.Internal.Controls.ConnectionPointCookie.Finalize()
Run Code Online (Sandbox Code Playgroud)
有没有人见过这个,或者有人知道如何调试这个?奇怪的是,没有调用堆栈,它在程序退出时正确发生.
Han*_*ant 13
你的问题没有细节,堆栈跟踪很短,但提供了很多线索来解决潜在的问题.一些明显的事实:
使用WebBrowser是一种负担,浏览器通常容易崩溃.当您在应用程序中使用该控件时,它会被放大,它在进程中运行,并且没有Internet Explorer本身使用的那种崩溃保护.因此,浏览器中出现问题的任何内容都会直接影响应用程序的稳定性,因为它是非常难以诊断的崩溃原因,因为它是非托管代码.
这样的崩溃重演非常糟糕,这是你自己无法获得重复的核心原因.浏览器中最常见的麻烦制造者是加载项,ActiveX控件(如Flash)和反恶意软件.如果您无法控制导航的网站类型,那么您会遇到额外的麻烦,有很多可以故意探测浏览器的漏洞.
您可以使用一个特定的对策,当您不再使用它时调用控件的Dispose()方法.通常在Window的Closing事件处理程序中.这将立即取消注册COM事件并触发崩溃,现在您可以捕获它.强烈考虑在发生这种情况时关闭你的程序,你的进程中确实有一个死尸,当你试图恢复它时会变成一个僵尸.
| 归档时间: |
|
| 查看次数: |
2168 次 |
| 最近记录: |