相关疑难解决方法(0)

c #destructors:处置"模式"和最佳实践

我知道c#中析构函数和终结符的含义和用法的不同.

但是,通常"我应该......"的回答是"不使用析构函数,而是使用MSDN中所示的dispose模式".埃里克利珀写道相当强烈反对使用析构函数不必要的.

但是,这种"模式"主张像这样编写析构函数~T() { Dispose(false); }.陈述的原因是它是一个"后备",在程序员忘记打电话的情况下调用Dispose().当然,这忽略了这样一个事实,即终结者在他们的行动中是不确定的,甚至可能永远不会运行.

因此:

  1. 如果我使用处理模式,我还应该提供析构函数吗?顺便说一下,我只处理托管资源(DataContext例如实体框架).

  2. 如果我提供了一个析构函数:如果我的类派生自一个IDisposable可能已经提供了析构函数的类,那么我是否应该提供一个析构函数呢?我认为在这种情况下永远不会写析构函数,但是文档说它无论如何都会自动调用基类的析构函数.

c# dispose destructor

2
推荐指数
2
解决办法
2420
查看次数

C#/ WPF app抛出一个ObjectDisposedException; 为什么我无法捕获或获得堆栈跟踪?

我有一个C#WPF UI应用程序,当我关闭它时,我总是得到一个Windows应用程序崩溃对话框("UIDemo遇到了问题,需要关闭.").

错误报告指示它是一个System.ObjectDisposedException,它指示在已处置对象上调用方法的某个位置.那很好,我明白这一部分.

我很想解决它. 我只是无法在这个混蛋上得到一个堆栈跟踪.

该例外正在逃避以下所有情况:

  • 我的DispatcherUnhandledException处理程序
  • 我的try/catch包含Exit事件处理程序的全部内容
  • 单击该应用程序崩溃对话框中的"调试"将关闭它并且不执行任何操作
  • 在VisualStudio的调试模式下运行应用程序似乎可以工作,但奇怪的是,它似乎没有这种方式崩溃,所以没有跟踪

我必须继续的是Windows发送给MS的错误报告的神秘内容.这些十六进制的内存转储并不是那么有用.

有谁知道我怎么能得到那个痕迹?

c# wpf stack-trace objectdisposedexception

1
推荐指数
1
解决办法
1167
查看次数